制作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
发表评论
-
Java调用dll步骤1
2012-01-20 01:09 583Java调用dll步骤1 2010年07月29日 jav ... -
在ASP.NET中利用MSMQ(Leveraging MSMQ in ASP.NET Applications)
2012-01-20 01:09 656在ASP.NET中利用MSMQ(Leveraging MSMQ ... -
MC的center系列之SCCM认识
2012-01-20 01:09 867MC的center系列之SCCM认识 2010年09月14日 ... -
tomcat 优化(转)
2012-01-20 01:09 515tomcat 优化(转) 2010年08 ... -
开源代码网站总结
2012-01-20 01:09 1074开源代码网站总结 2011年04月07日 1. ... -
我的日志
2012-01-19 08:59 594我的日志 2012年01月16日 毋痈“乜ψ不许 ... -
ARM中B __Main和B Main的区别(好文)
2012-01-19 08:59 681ARM中B __Main和B Main的区别(好文) 201 ... -
android 2.2
2012-01-19 08:59 480android 2.2 2011年05月31日 Andr ... -
转 android source code list
2012-01-19 08:59 452转 android source code list 2 ... -
android源代码结构分析1
2012-01-19 08:58 619android源代码结构分析1 2011年07月04日 ... -
编写优质无错C程序秘诀!
2012-01-17 01:28 689编写优质无错C程序秘诀! 2011年08月01日 这里我 ... -
互斥量、临界区、信号量、事件标志组和消息邮箱
2012-01-17 01:28 2434互斥量、临界区、信号 ... -
转载--C/C++中容易造成内存溢出的函数
2012-01-17 01:28 1257转载--C/C++中容易造成内存溢出的函数 2011年01月 ... -
TCP/IP 续二
2012-01-17 01:28 1219TCP/IP 续二 2011年04月08 ... -
v4l2驱动编写篇(2)
2012-01-17 01:28 650v4l2驱动编写篇(2) 2011年04月01日 应用可 ... -
VB如何连接帮助文件
2012-01-15 20:09 657VB如何连接帮助文件 2009年12月04日 VB如何 ... -
vb代码2
2012-01-15 20:09 627vb代码2 2010年11月21日 ... -
VB 打开文件
2012-01-15 20:09 640VB 打开文件 2009年07月21日 关于VB中She ... -
VB ShellExecute 函数应用技巧
2012-01-15 20:09 1211VB ShellExecute 函数应用技巧 2010年05 ... -
IT生活的血泪史
2012-01-11 12:18 501IT生活的血泪史 2011年03 ...
相关推荐
javascript,JavaScript 最初由 Netscape 公司的 Brendan Eich 在 1995 年开发,用于 Netscape Navigator 浏览器。随着时间的推移,JavaScript 成为了网页开发中不可或缺的一部分,并且其应用范围已经远远超出了浏览器,成为了全栈开发的重要工具。
上位机开发罗克韦尔abcip通信协议详解 1.注册会话命令详解 6500 0400 00000000 00000000 0000000000000000 00000000 0100 0000 响应 6500 0400 05000400 00000000 0000000000000000 00000000 0100 0000 6500:注册请求命令 0400:服务长度(0100 0000) 00000000:会话句柄 (由PLC生成) 00000000:状态默认 0000000000000000:发送方描述,默认0 00000000:选项,默认0 0100:协议版本,默认1 0000:选项标记,默认0
Spy++ (SPYXX.EXE) 是一个基于 Win32 的实用工具,提供系统进程、线程、窗口和窗口消息的图形视图。 Spy++ 有两个版本。 第一个版本,名为 Spy++ (spyxx.exe),用于显示发送到在 32 位进程中运行的窗口的消息。 例如,在 32 位进程中运行的 Visual Studio。 因此,可以使用 Spy++ 来显示发送到“解决方案资源管理器” 中的消息。 由于 Visual Studio 中大多数生成的默认配置都是在 32 位进程中运行的,因此如果已安装所需组件,则第一个版本的 Spy++ 就是在 Visual Studio 中的“工具”菜单上可用的那一个。 第二个版本,名为 Spy++(64 位)(spyxx_amd64.exe),用于显示发送到在 64 位进程中运行的窗口的消息。 例如,在 64 位操作系统上,记事本在 64 位进程中运行。 因此,可以使用 Spy++(64 位)来显示发送到记事本的消息。 详细的使用说明请见:https://blog.csdn.net/huang1600301017/article/details/138137
导出excel示例
HTML2-iOs-App模板官网落地页APP主页产品宣传页源码 landing静态页面
计算机技术是指评价计算机系统的各种知识和技能的总称。它涵盖了计算机硬件、软件、网络和信息安全等方面。计算机技术的发展使我们能够进行高效的数据处理、信息存储和传输。现代计算机技术包括操作系统、数据库管理、编程语言、算法设计等。同时,人工智能、云计算和大数据等新兴技术也在不断推动计算机技术的进步。计算机技术的应用广泛,涵盖了各个领域,如商业、医疗、教育和娱乐等。随着计算机技术的不断革新,我们可以更加高效地实现预期自动化、标准化
基于Java聊天室程序(java)
百度Apollo学习:Routing模块结构和源码
中国软件开源创新大赛:开源任务挑战赛(顶会论文复现赛)
网络安全课程作业收集.zip
电子商务HTML模板源码 大数据大屏展示源码 VUE
FPGA 实验-ZGF.rar
智慧旅游HTML模板源码 大数据大屏展示源码 VUE
HTML9-eCommerce模板官网落地页APP主页产品宣传页源码 landing静态页面
2024.4.17的rip 作业
._Gradient - Illustration Scene Generator by PanoplyStoreAdobeXD源码下载设计素材UI设计
1、卸载MariaDB 查看版本:rpm -qa|grep mariadb 卸载:rpm -e --nodeps 文件名 2、下载mysql8 https://dev.mysql.com/downloads/mysql/ 3、解压安装文件 tar -xvf /usr/local/mysql/mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar 4、安装mysql8 rpm -ivh mysql-community-common-8.0.29-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.29-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.29-1.el7.x86_64.rpm rpm -ivh mysql-community-client-8.0.29-1.el7.x86_64.rpm rpm -ivh mysql-community-icu-data-files-8.0.29-1.el7.x86_64.rpm rpm -ivh
汇编语言基础知识.pdf
TCP调试组手,支持TCP客户端、TCP服务器,断开重连,自动循环发送等功能。