制作VB安装程序问答(Package & Deployment)
2009年12月04日
制作安装程序往往是程序设计的最后一步,同时也是重要的一步,因为运行安装程序往往是用户的第一个操作。下面就介绍一些制作 Visual Basic 安装程序时常遇到问题的解决方法。
1 、一个非常简单的 VB 程序是否可以不制作安装程序
问:假如我的 VB5 开发的程序很简单,只用到了 ShellExecute() 这个 API , 以及 Command Button ,我能不能不做安装盘,在所有客户机器上( WIN95/98/NT )都能正常使用程序?如不制作安装程序,与 EXE 放一起的应该包括哪些文件?
答:对于一个非常简单的 VB5 程序,没有使用额外的 OCX 控件,在 Win98/2000 下是可以正常运行的,而不需要制作安装盘。因为 Win98/2000 带有 VB5 程序所需要的 DLL 文件。但在 Win95/NT 4.0 下一般是不行的,因为缺少必要的文件。如果用户的机器上安装有 IE 4.0/5.0 ,那么应该也是可以不制作安装盘的。在一般情况下,不制作安装盘就不不能保证程序的正确运行。你制作的安装盘所包括的 DLL 中,除了 Vb5stkit.dll 只是安装时使用,安装后就不需要了,其他 DLL 都是不可缺少的。虽然对于某些机器而言,由于安装过其他软件,可能不需要某个 DLL ,但要想在所有的机器上都正确运行,一个文件都不能少。所以为了避免由于缺少某个文件或注册不正确而使程序无法运行,我建议你还是制作安装盘比较保险。如果你的程序是放在网上供别人下载的,为了减少下载文件的大小,可以这样做:将你的程序单独打成一个包,如果用户已经有了运行 VB5 程序所需要的有关文件,就只需下载你的程序;然后,在网页上提供一个 VB5 的运行时间库的链接(如 http://download.microsoft.com/download/vb50pro/utility/1/win98/EN-US/Msvbvm50.exe ),如果用户的机器上没有这些文件,让它单独下载运行库。这是一种比较通行的方法。
2 、是否一定要注册 ActiveX 控件
问:若在一个程序中使用了其他的控件 , 如何在没有注册该控件的机器上运行 , 是不是一定要制作安装程序或注册该控件呢 ?
答:在 Win95/98 下,如果你的控件和 EXE 文件在同一个目录中,或者控件文件放置在 System 目录中, EXE 程序运行时会自动找到所需要的 OCX 文件并注册。但是这种方法在 WinNT 下不适用, NT 下必须先注册控件才能保证 EXE 程序的正常运行。另外,这种自动注册有一些毛病,如果机器已经存在一个低版本的控件,自动注册可能会失败。所以,如果你希望自己的程序能够非常好地工作,最好还是制作安装程序,否则可能会有麻烦。
3 、如何利用 VB6 给自己的软件加上卸载功能
问:请介绍一下如何利用 VB6 给自己的软件加上卸载功能,即象购买的软件一样的卸载功能?
答: VB6 的安装向导制作的安装程序本身包括卸载功能,不过这个功能并不出现在“开始”菜单中。安装后,要进行卸载工作,可以打开“控制面板”,点击“安装 / 删除程序”图标,然后选择想要卸载的软件。
如果希望在菜单中添加选项,可以在制作安装程序包时加入相应的程序项。 VB6 的“ Package & Deployment 向导”支持安装程序创建自己的程序组和菜单项。在“ Package & Deployment 向导”的“启动菜单项”一步(图 1 ),选择“新建项”按钮,此时会出现一个对话框。在对话框的 “名称”文本框中输入菜单项的名称,如“卸载 VBTERM ”。在“目标”框中输入卸载项的命令为: $(WinPath)\st6unst.exe -n "$(AppPath)\ST6UNST.LOG" 。然后选择确定关闭该对话框。这样生成的安装程序中将包括一个卸载程序的菜单项。
图 1 在启动菜单项中添加一个卸载项
4 、程序错误: can not fond 'c:\windows\temp\msftqws.pdw\st6unst.ext'
问:本人用 VB6.0 制作了一个程序,但在某个机器上安装时 , 会出现以下错误 :
1. “ system error &H80004005(02147467259) 未指定错误”
2. “ can not found 'c:\windows\temp\msftqws.pdw\st6unst.ext' ”
3. 无法开始系统安装程序。
答:这是由于 VB6 的一个 BUG 导致的,你可以升级到 VB6 SP3 (从 http://msdn.microsoft.com/vstudio/sp/default.asp 下载),在这个升级版本中修复了这个错误。
5 、安装软件时报告 DLL 中没有发现 DllRegisterServer
问:本人用 VB 6 制作了一个程序,但在安装这软件是时系统报告:
错误 : 在 'C:WINDOWS\SYSTEM\expsrv.dll' 中未发现 DllRegisterServer() 的\ WINDOWS\SYSTEM\expsrv.dll" 输入点
*** 在本操作期间 : DllSelfRegister: "C:
*** 错误 : 注册文件 'C:\WINDOWS\SYSTEM\expsrv.dll' 时出错
*** 错误 : ( 用户响应 ' 忽略 ')
忽略错误后安装完成。在 WINDOWS 98 下安装已有同样的问题。
答: DLL 有两种,一种是标准 DLL ,另一种是 ActiveX DLL 。前者拷贝到用户机器上就可以工作了,而后者还需要调用 DLL 中的 DllRegisterServer 或者使用 RegSvr32 进行注册才能使用。你可以打开 VB98\Wizards\PDWizard\VB6dep.ini 文件。下面是这个文件的片断:
[ExpSrv.dll]
Dest=$(WinSysPathSysFile)
CABFileName=MSJet35.cab
CABDefaultURL=http://activex.microsoft.com/controls/vb6
CABINFFile=MSJet35.inf
[MSRD2x35.dll]
Dest=$(WinSysPathSysFile)
Register=$(DLLSelfRegister)
CABFileName=MSJet35.cab
CABDefaultURL=http://activex.microsoft.com/controls/vb6
CABINFFile=MSJet35.inf
你可以看到 MSRD2x35.dll 比 ExpSrv.dll 多一行 Register=$(DLLSelfRegister) ,这是因为 MSRD2x35.dll 是 ActiveX DLL 。 ExpSrv.dll 是普通的 DLL ,没有 DllRegisterServer ,也用不着注册。你所遇到的问题是 VB6 的一个 BUG (在 VB6 SP3 中已经修复)。如果你 VB6dep.ini 文件的 ExpSrv.dll 多了 Register 一行,应该删除。或者打开安装程序的 Setup.lst ,删除其中 ExpSrv.dll 一行中的“ $(DLLSelfRegister) ”字样。
6 、如何制作包括子目录的安装程序
问:我用 VB+Access 开发数据库系统。但到发布时用 VB 自已的发布向导时,我程序目录中的子目录的文件却加入不正常,向导不按子目录区分,都加入程序目录中。怎么办?
答: VB 的安装向导是支持包括子目录的安装程序的。运行安装向导到“文件小节”一步(图 2 ),在对话框中选择“添加”按钮,然后选择应该放置在子目录中的文件添加到文件列表中。
图 2 添加要安装的文件
然后从文件列表中选择该文件,点击 “文件详细资料”按钮。在图3所示对话框中的设置目标路径。最好不要用绝对路径(如C:\MyProject)来指定安装位置,这样会给用户带来不便。安装向导使用宏来指示文件要安装的位置。这些宏只在安装程序中有效。宏的含义参见表1。如果要将文件放置在应用程序目录下的 \Data 子目录下,可以使用$(AppPath)\Data来指定安装路径。
图 3 设置文件的安装目录
表1 安装向导使用的宏及其含义
$(WinSysPath)
Windows 95/98下的 \Windows\System 子目录,或 Windows NT 下的 \Winnt\System32 目录。
$(WinSysPathSysFile)
Windows 95/98下的 \Windows\System 子目录, 或 Windows NT 下的\Winnt\System32 目录,作为系统文件,当删除应用程序时它不删除。
$(WinPath)
Windows 95/98 下的 \Windows 或 Window NT 下的 \Winnt。
$(AppPath)
用户指定的应用程序目录,或 Setup.lst文件中 [SETUP] 部分指定的 DefaultDir 值。
$(ProgramFiles)
应用程序通常所安装到的目录,通常为C:\Program Files
$(CommonFiles)
有时安装共享文件的公用目录,通常为C:\Program Files\Common Files
$(MSDAOPath)
数据访问对象 (DAO) 部件在注册表中的位置,不能用于自己的文件。
7 、如何让安装程序在桌面上放一个快捷方式
问:安装时,用 VB 自己的“展开与打包向导”制作安装盘,不知道怎么让程序在桌面上放一个快捷方式?
答: VB “展开与打包向导”所生成的安装程序的工作步骤是这样的:先运行 Setup.exe ,这个程序将 VB 的运行库安装到用户的机器上,同时将 .cab 文件中的文件释放到临时目录中,然后再调用临时目录中 Setup1.exe 完成余下的安装工作。 Setup1.exe 是由 VB 写的 ( 正是这个原因所以要先安装 VB 的运行库 ) ,其源程序可以在 VB98\Wizards\PDWizard\Setup1 中找到。如果你对 VB 的安装程序不满意,希望添加新功能,可以直接修改 Setup1.vbp 。具体到你的问题,在 VB 中可以打开 Setup1.vbp ,然后修改 Setup1.frm 的 Form_Load 事件,在其中可以找到如下几行:
'
' Create program icons (or links, i.e. shortcuts).
'
If (fMainGroupWasCreated = True) Or ((cIcons > 0) And TreatAsWin95()) Then
ShowStaticMessageDialog ResolveResString(resPROGMAN)
CreateIcons gsICONGROUP
'
' Do the same for other sections in SETUP.LST if you've added your own.
'
'CreateIcons "MySection"
'CreateIcons "MyOtherSection"
'
End If
在 If.. End If 中加上:
(VB 5.0中)
OSfCreateShellLink "..\..\Desktop", _ "我的程序", gstrDIR_DEST + "MyProg.exe", ""
(VB 6.0中)
OSfCreateShellLink "..\..\Desktop", _ "我的程序", gstrDIR_DEST + "MyProg.exe", "", True, "$(Programs)"
重新编译 Setup1.vbp ,用 Setup1.exe 替换掉原来的 Setup1.exe 即可。
8 、 DEP 文件有什么用
问:用 VB5 的安装向导制作的程序安装包里,总有一个 .DEP 文件,请问这个文件有什么用?是否与 OCX 注册有关?如何打开?如何编辑?
答:只有当你为 ActiveX 控件制作安装包的时候,才会出现 .DEP 文件。这个文件主要是供使用你的 ActiveX 控件的程序设计者制作他自己的程序的安装盘时使用的。你的用户在使用 Setup Wizard 制作安装盘时, Setup Wizard 会读取这个文件,检查你的 ActiveX 控件需要哪些 DLL 支持。一般不用手工修改这个文件,如果你认为确有必要,可以使用记事本打开修改。
9 、如何修改安装程序的缺省目录
问:我在做成安装文件后,安装过程中系统缺省的目录是 c:\program files\tele ,而我需要的是 c:\tele2000, 请问有办法修改吗?
答:要修改安装程序的缺省目录,可以打开安装盘的 setup.lst 文件。在这个文件中可以找到下面一行:
DefaultDir=$(ProgramFiles)\tele
将这行中的“ $(ProgramFiles)\tele ”修改为你想要的目录(如 c:\tele2000 )就可以了。
10 、总是显示 $(DllSelfRegisterEx) 不能被注册
问:我用 VB5.0 安装向导生成的安装程序,安装到最后时总是显示“文件 c:\windows\system\$(DllSelfRegisterEx) 不能被注册,由于它未找到”的提示信息后安装失败,请问为何原因?
问:这是 VB5.0/6.0 的一个 Bug 。
如果运行 Visual Basic 5.0 生成的安装盘,会产生下面的错误:
The file '\$(DLLSelfRegisterEx)' could not be registered because it was not found.
如果运行 Visual Basic 6.0 生成的安装盘,会产生下面的错误:
The file '\Msftqws.pdw\$(DllSelfRegisterEx)' could not be registered because it was not found.
这个问题发生在分发 Microsoft Calendar control(MSCal.ocx) 时。 MSCal.dep 文件中的 "Register=" 行被错误地设置成 $(DLLSelfRegisterEx) 了。
解决办法如下:
1. 使用记事本打开 Setup.lst 文件。 Setup.lst 文件是 Setup Wizard 或 PDW 制作安装盘时生成的。
2. 查找 $(DLLSelfRegisterEx) 。你将看到在 MSCal.ocx 的一行中有 $(DLLSelfRegisterEx) 。
3. 修改 $(DLLSelfRegisterEx) 为 $(DLLSelfRegister) 。
4. 关闭记事本并保存文件。
5. 运行 Setup.exe 。
如果希望今后生成的 setup.exe 都不出这样的错误,可以这样做 :
1. 使用记事本打开 MSCal.dep 文件。你可以在 MSCal.ocx 所在的目录(通常是 Windows 95/98 的 Windows\System 或 Windows NT 的 Winnt\System32 )找到 MSCal.dep 文件。
2. 查找 $(DLLSelfRegisterEx) 。你将可以在 "Register=" 一行看到 $(DLLSelfRegisterEx) 。
3. 修改 $(DLLSelfRegisterEx) 为 $(DLLSelfRegister) 。
4. 关闭记事本并保存文件
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wqvbjhc/archive/2009/12/03/4935420.aspx
发表评论
-
通过ACL和.net Framework实施对Windows对象访问的管理
2012-01-20 01:02 833通过ACL和.net Framework实施对Windows对 ... -
Windows Azure(四-2):云端的文件系统(Blob Storage)
2012-01-20 01:02 740Windows Azure(四-2):云端的文件系统(Blob ... -
windows 64bit平台移植总结
2012-01-20 01:02 809windows 64bit平台移植总结 2010年08月10 ... -
Windows Mobile Test Framework实现手机软件自动化测试的介绍
2012-01-20 01:02 853Windows Mobile Test Framework实现 ... -
是谁成就了凤姐的忘形
2012-01-19 08:50 636是谁成就了凤姐的忘形 2010年06月02日 ... -
全国名小吃
2012-01-19 08:50 589全国名小吃 2012年01月14日 广西小吃 广西菜点由 ... -
看“非诚勿扰”(2011.3.27)
2012-01-19 08:50 654看“非诚勿扰”(2011.3.27 ... -
全国各省女孩性格+美丽程度比较分析!
2012-01-19 08:50 771全国各省女孩性格+美丽 ... -
中国不同地方女人的主要特点
2012-01-19 08:50 892中国不同地方女人的主 ... -
转: Boost下载安装编译配置使用指南(含Windows和Linux)
2012-01-17 01:18 609转: Boost下载安装编译配 ... -
Android环境搭建(jdk1.6+eclipes3.4.1+Android sdk2.3+adt0.9.7)
2012-01-17 01:18 782Android环境搭建(jdk1.6+eclipes3.4.1 ... -
Windows系统下查看Android的源码的方法
2012-01-17 01:18 910Windows系统下查看Android的源码的方法 2010 ... -
修复工具类
2012-01-17 01:18 686修复工具类 2011年05月08日 ... -
vb代码2
2012-01-15 20:01 695vb代码2 2010年11月21日 ... -
VB 打开文件
2012-01-15 20:01 985VB 打开文件 2009年07月21日 关于VB中She ... -
VB ShellExecute 函数应用技巧
2012-01-15 20:01 969VB ShellExecute 函数应用技巧 2010年05 ... -
天铭本期热招岗位7.19-7.25
2012-01-15 20:01 10天铭本期热招岗位7.19-7. ... -
程序员如何提升(看了很多文章以后的总结/摘要)--未完待续
2012-01-11 12:11 548程序员如何提升(看了很多文章以后的总结/摘要)--未完待续 ... -
DB2数据库常用命令集
2012-01-11 12:11 594DB2数据库常用命令集 2011年05月01日 mem ... -
乐观锁与悲观锁-结合hibernate的简介--iteye技术网站
2012-01-11 12:11 690乐观锁与悲观锁-结合hib ...
相关推荐
vb6.0 Activex控件制作实例 vb6.0本身就带了打包工具“Package & Deployment 向导”,根据打包向导一步步做就可以,但是要注意的是“安全性设置”中要全选“是”,否则无法在网页中显示控件。
8911A-EN_Installation_&_Deployment_in_CRM_Student_Manual.pdf
WiseInstallationSystem-v9.02 内含序列号,汉化包另外上传 简单易用、功能强大的安装程序制作工具,使用难度与微软自带的Package & Deployment 工具差不多,无需学习一看即会,强烈推荐
Oracle Automatic Storage Management_ Under-the-Hood & Practical Deployment Guide
tpkg是用于打包和部署应用程序的跨平台工具。 它旨在与操作系统的打包工具一起使用。 tpkg中的部署功能旨在扩展到数百或数千个系统中的部署
BDB 2007 is a software of database design and database deployment distributed by Bainsoft(www.bainsoft.com). It suppots such database as Oralce,MS SQLServer,MySQL,Access,SQLAnywhere and Sybase. ...
BDB 2007 is a software of database design and database deployment distributed by Bainsoft(www.bainsoft.com). It suppots such database as Oralce,MS SQLServer,MySQL,Access,SQLAnywhere and Sybase. ...
web deployment project web deployment project web deployment project web deployment project web deployment project
django-package-deployment-workshop:将Django项目部署为Python Packages Workshop
WebSphere Application Server Network Deployment 7 集群安装部署步骤。
全部Altiris安装配置学习教程下载地址 http://blog.csdn.net/afterain/archive/2008/06/05/2512778.aspx
WebDeployment for vs2010 vs2010/SN:YCFHQ-9DWCY-DKV88-T2TMH-G7BHP
Microsoft Deployment
development and deployment of Kubernetes are constantly catching up to the momentum behind the open source technology. This continual evolution makes Kubernetes deployment a bit of an unsteady, fast-...
APOMS_TSQL_Deployment_Package_05Dec.rar TSQL 对象 自动征收脚本,组装sqlcmd,按顺序批量执行 要求powershell 2.0 以上 sqlps
Continuous Deployment of Mobile Software at Facebook Abstract Continuous deployment is the practice of releasing software updates to production as soon as it is ready, which is receiving increased ...
Quality Function Deployment
Altiris deployment solution for Dell server
Oracle Clusterware Administration and Deployment Guide, 11g Release 2 (11.2)
oracle form Deployment Guide.pdf