关于Windows:如何在XP / Vista及更高版本上为VB6创建简单的安装系统?

关于Windows:如何在XP / Vista及更高版本上为VB6创建简单的安装系统?

How to create a simple install system for VB6 on XP/Vista and newer?

强调简单。 我从来没有做过安装程序,所以我不想学习太多。 我可以将一堆文件传送到该系统的系统,它将对放置文件的位置做出一些明智的猜测,将是理想的选择。

继续回答一般问题。

但是,在我的情况下,我遇到了一些额外的限制。 要安装的程序是用VB6(或者是5?)和一些以前的VB版本编写的,因此不会很快更新。 我有一个正在运行的安装程序,并且将有一个Clean VM配合使用,因此我将做一个循环:运行安装程序,查找损坏的地方,修复它,将其添加到安装程序中,还原VM,然后重试。 如果有人有更好的方法,我欢迎您提出建议。

我必须让它在XP上运行,而且我真的很想也能在Windows的新版本上使用它。


InnoSetup或NSIS,以您认为较简单的方式为准。 ISTool是用于InnoSetup的不错的GUI工具,它使创建安装脚本更加容易。


几年前,在Vista之前,我曾使用过InnoSetup,那时我对此非常满意。我只有几个要安装的文件和一个"开始"菜单图标。它效果很好,而且很容易学习。


Dependency Walker对于找出安装程序中缺少哪个dll非常有用。一旦知道了dll,就可以使用"合并模块查找器"找到它所在的合并模块。


为程序创建完整的安装程序包本身几乎是一个主题领域。有许多因素需要考虑,我们大多数人都不再运行Windows 95。世界并不像过去那样简单。

有很多事情需要解决,其中一些"设置"问题也意味着更改程序。例如,当Vista UAC出现时,"受保护的文件夹"概念对于人们来说似乎是陌生的。我想他们都以管理员身份运行?以最简单的形式,它意味着您不再需要在程序中的EXE旁边放置可写文件(也称为"程序文件")。

另一个因素是注册表的使用方式已更改。我不是在谈论注册表虚拟化,尽管这也是其中的一部分。但是,COM注册可以按机器和按用户进行,甚至关闭UAC也会使事情变糟。请参阅Windows Vista SP1上的使用UAC的按用户COM注册和高级进程。结果是安装程序包不应运行regsvr32(或以其他方式调用COM库的self-reg入口点)。请参见SelfReg表中的"备注"。

在大多数情况下,Windows Installer是前进的方法。 VB6程序员可以免费下载Visual Studio Installer 6.0版本1.1,以创建MSI程序包。有关一些有价值的信息,请参见VFP文章"使用Microsoft Visual Studio安装程序分发Visual FoxPro 6.0应用程序"中的" COM服务器"。

这不是最简单的选择,但是VSI 1.1中有一个VB安装向导,可以帮助您正确掌握基础知识。执行高级操作,例如创建[CommonAppData]子文件夹并设置其上的"所有人"权限,必须在IDE之外的构建后步骤中完成。在这里,第三方工具可以帮助您提供更多控制权,而无需诉诸Orca或构建后的Installer脚本。

那些使用脚本编写的"旧版"安装程序的人试图跟上,但是脚本编写变得越来越复杂。结果有时是不确定的。 Windows 7引入了一些新功能。

尽管ClickOnce并不是VB6的最佳选择,但没有人说您不能对许多程序的XCopy安装使用无注册限制的COM。就此而言,无Reg的COM甚至可以作为在Installer软件包中使用的好选择。

因此,最后,部署VB6程序的"最简单"方法可能将是无规则的COM XCopy程序包,这些程序包包装在自解压EXE中,该程序将触发脚本以创建"开始菜单"快捷方式。如果没有快捷方式就可以生存,那么这甚至会更加容易:只需将软件包解压缩到需要的位置即可!

请参阅"制作我的清单"或其他工具以进行无注册的COM打包。

这要求目标系统运行XP(最好是SP2)或更高版本。这里唯一可能出现的故障是XP直到XP SP3才包含VB6 SP6运行时,因此您首先要针对VB6 SP5运行时测试程序。还有一个小故障:您不能以这种方式使用ActiveX EXE,它们仍然需要注册。


我曾与NSIS合作,克服了它的一些小问题,这是一个很棒的系统。它是免费的,提供大量的插件功能,并且可以完成我需要做的所有事情。


我曾经喜欢Inno Setup。强调"用于"。

当您运行单个文件安装程序时(通常会执行此操作),它将实际安装程序解压缩到temp文件夹下的文件夹中,然后尝试执行它。问题是...一些防病毒程序不允许这样做。

作者意识到这一点,并拒绝对此做任何事情。该文件夹名称是随机的,因此不能添加到您的防病毒程序可能使用的任何豁免列表中。

再次。作者意识到了这一点,并建议我告诉我的用户在安装过程中关闭其防病毒程序。 (就像那样会发生)


我的建议是这个。尝试使安装程序尽可能简单。 Windows Installer是一个非常复杂的软件,当无法正常工作时,可能很难弄清发生了什么。我敢肯定,我们所有人都经历过Windows Installer不断循环尝试尝试修复不再具有源.msi文件的文件的情况。

在大多数情况下,使用Windows Installer就像使用大锤砸开螺母一样。

我将InnoSetup用于自己的东西,并在工作中使用InstallShield(违背我的意愿)。从一个简单的基于脚本的安装程序开始,只有在有充分理由的情况下才使用Windows Installer。

请注意,某些非Windows Installer设置工具(例如InnoSetup)可能缺少将程序集安装到GAC的支持。


推荐阅读