深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

ASP 连接执行程序


March 25,2004
一、需求
当前,使用ASP开发动态网页,客户端使用微软公司的IE系列浏览器查看是一种很流行的模式。我们在开发过程中遇到了这样的一个问题,由于技术和时间上的限制,必须在网页中调用一个执行程序。你当然可以用一个超级链接直接指向所需的程序,但这样做会被微软“黑”一下的:每次在IE中打开这个链接时就会出现一个不受欢迎的警告框(当然,它有它的道理,主要是出于安全方面的考虑),这对用户来说是很能接受的。能不能用一个很方便、简洁的方法来解决这个问题呢?  
经过一番研究,出台了一个被称为“李代桃僵”的方法:
l 在系统中创建一种特定的文件类型,如:*.spa;
2 将该类型的文件与要在ASP中执行的程序关联起来;
3 超级链接指向一个设定的扩展名是“spa”的文件。
这种做法的原理是:在IE中通过超级链接打开一个文件时,如果浏览器自身能解释该类型的文件,文件的内容直接显示在浏览器中,如文本文件,否则就搜索注册表中设置,找出处理这种类型文件的程序,然后调用相应的程序打开该文件。  
二、方法
具体的实现方法为手工和自动两种方式,如下所示:
(一)、手工设置
l 打开资源管理器,如图1所示,点击[查看]菜单中的[文件夹选项]菜单,系统显示[文件夹选项]对话框,如图2 所示,其中有[文件类型]页;
  
注意:须选中某个文件或文件夹,如果选中提[打印机]或[控制面板]等该对话框没有这一页

2 点击[新建类型(N)…]按钮,打开[添加新文件类型]对话框,如图3所示。在[类型说明]文本框中输入“ASP关联”,在[相关扩展名]文本框中输入“.spa”;(注:[内容类型]是用做选择已经安装的程序关联某种类型的文件,该框不填)
  
3 打开”,点击[浏览(R)…]按钮,在对话框中选择要在ASP中调用的程序。
  
4 点击每个对话框的[确定]的按钮即可完成;

特别注意:如图3所示的[添加新文件类型]对话框的下方面有一个[下载后确认打开]选项。该选项在默认状态下是被选中的,这种情况下,在网页中初次打开“.spa”类型的文件时,系统会给出提示框询问是否继始终用某个程序打开该类型的文件。如果连这个框也不想出,则须将[下载后确认打开]选项置于非选中状态

设置完成后,超级链接指向一个文件,如a.spa,再点击一次,你就会看到你需要的程序不讲任何条件就运行起来了!  
自动设置
很显然,系统编制完成交到用户手中时,如果还要求用户做上述设置是不现实的,软件的生存能力会大打折扣,因为没有几个人会愿意听扩展名和注册表的。那么就必须让述的工作自动完成。
在手工设置的程序与文件关联后,所有相关的信息都存在了注册表中,因此只要在注册表中写入相同的内容即可实现关联可执行程序的功能。在注册表中写入一些信息对现有的编程软件来说是一件比较简单的事情,象VB和Delphi都提供了完整的存取注册表内容的的函数,另外打包工具通常也是提供写注册表的功能的。那么如何在注册表中找到对应的信息呢。该当方法如下:
l 打开注册表编辑器(点击开始菜单中的运行,在文件框中输入“regedit”,回车);  
2 点击注册表编辑器中的[编辑]菜单中的[查找]菜单项,在[查找目标]文本框中输入“.spa”,然后开始查找,很快就会找到一个名叫“.spa”的主键,它有一个默认的字符串值“spafile”。点击[注册表]菜单中的[导出注册表文件],将该主键的设置导出到一个文件中,如“spa1.reg”;
4 再次使用[编辑]菜单中的[查找]菜单项,在[查找目标]文本框中输入“spafile”,然后开始查找,很快就会找到一个名叫“spafile”的主键,它有“Shell”等子键,采用上一步同样的方法,将该主键的设置导出到一个文件中,如“spa2.reg”
现在只需打开这两个文件,参照其中的设置写几行程序,工作就完成了!

3.附两个注册表文件的内容
l spa1.reg
[HKEY_CLASSES_ROOT.spa]
@="spafile"
注:“@”是默认的意思

l spa2.reg
[HKEY_CLASSES_ROOTspafile]
@="ASP关联"
"EditFlags"=hex:00,00,01,00

[HKEY_CLASSES_ROOTspafileShell]
@=""

[HKEY_CLASSES_ROOTspafileShellopen]
"EditFlags"=hex:01,00,00,00

[HKEY_CLASSES_ROOTspafileShellopencommand]
@="C:\WINDOWS\Notepad.exe %1"

       
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved