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

7

强调简单。我从未制作过安装程序,也不想学习太多知识。一个系统,我可以将一堆文件交给它,并且它会自动判断应该把它们放在哪里,这是理想的。

请回答一般性问题。

但是,在我的情况下,我受到了一些额外的限制。要安装的程序是用VB6(或者是5?)和一些以前版本的VB编写的,因此它不会很快得到更新。我有一个正在运行的安装程序,并且将有一个干净的虚拟机来测试。所以我将循环执行以下步骤:运行安装程序,找到故障点,修复它,将其添加到安装程序中,还原虚拟机,再次尝试。如果有更好的方法,请告诉我。

我必须让它在XP上正常工作,并且我也希望它能在较新版本的Windows上工作。


可能是构建Windows安装程序的最佳选择是什么?的重复问题。 - saschabeaumont
@sascha 不是重复,因为安装VB6程序与安装.Net程序有一些不同。 - MarkJ
7个回答

11

InnoSetupNSIS,随你选哪个看起来更容易。对于 InnoSetup,有一个不错的 GUI 工具叫做 ISTool,可以让创建安装脚本更加简单。


我正在使用Inno(我没有尝试过其他软件),发现它很容易使用。不过文档方面有点不足。 - BCS
NSIS非常出色!我已经使用它好几年了。你可以制作一个非常简单的安装程序,但也可以按照你所需或希望的程度进行深入涉及。 - Nerdtron

5

我几年前在Vista之前使用过InnoSetup,当时非常满意。我只需要安装几个文件和一个开始菜单图标。它运行良好,而且很容易上手。


4

Dependency Walker非常有用,可以帮助找到安装程序中缺失的dll文件。一旦知道了缺失的dll文件,您就可以使用Merge Module Finder来查找它所在的合并模块。


Dependency Walker 真的非常方便。 - BCS

1
创建一个完整的程序安装包几乎是一个独立的主题。有许多因素需要考虑,而我们大多数人不再使用Windows 95了。这个世界已经不像以前那么简单了。
有很多问题需要解决,其中一些“设置”问题也意味着改变程序。例如,“受保护的文件夹”概念在Vista UAC出现时似乎对人们来说是新的。我猜他们都是以管理员身份运行的?在其最简单的形式中,它意味着您不再将可写文件放在程序(又名“Program Files”)旁边的EXE中。
另一个因素是注册表的使用方式已经改变。我不是在谈论注册表虚拟化,尽管这也是其中的一部分。但是COM注册可以按照计算机或用户进行,即使关闭UAC也可能会搞乱这个过程。请参阅Per-User COM Registrations and Elevated Processes with UAC on Windows Vista SP1。结果是安装包不应该运行regsvr32(或以其他方式调用COM库的自注册入口点)。请参阅SelfReg Table中的“备注”部分。

在大多数情况下,Windows Installer是前进的方向。VB6程序员可以免费下载Visual Studio Installer 6.0版本1.1来创建MSI包。请参阅VFP文章Using Microsoft Visual Studio Installer for Distributing Visual FoxPro 6.0 Applications中的“COM服务器”以获取一些有价值的信息。

这不是最简单的选择,但是VSI 1.1中有一个VB安装向导可帮助正确完成基本操作。像创建[CommonAppData]子文件夹并在其中设置Everyone权限之类的高级操作必须在IDE外的后构建步骤中完成。这就是第三方工具可以派上用场的地方,可以为您提供更多控制而不必诉诸Orca或后构建安装程序脚本。

那些制作脚本“遗留”安装程序的人试图跟上步伐,但脚本变得越来越复杂。结果有时会出现问题。Windows 7引入了一些新的问题。

虽然ClickOnce不是VB6的最佳选择,但并不意味着您不能使用无需注册表的COM来进行许多程序的XCopy安装。对于安装程序包而言,无需注册表的COM甚至可以成为一个不错的选择。


最终,部署VB6程序的“最简单”方法可能是使用自解压EXE包装的reg-free COM XCopy包,并触发一个脚本来创建开始菜单快捷方式。如果您可以不使用快捷方式,那么这将更加容易:只需将包解压到需要放置的位置即可!
请参见Make My Manifest或其他工具以进行reg-free COM打包。
这要求目标系统运行XP(最好是SP2)或更高版本。唯一可能的问题是XP没有在XP SP3之前包含VB6 SP6运行时,因此您需要先针对VB6 SP5运行时测试您的程序。还有一个问题:您无法以这种方式使用ActiveX EXE,它们仍然需要注册。

1

我已经使用了NSIS,克服了一些它的小复杂性,它是一个非常棒的系统。它是免费的,提供了大量的插件能力,并且成功地完成了我需要做的一切。


0

我曾经非常喜欢 Inno Setup,重点是“曾经”。

当你运行单文件安装程序(通常情况下),它会将真正的安装程序解压到临时文件夹下的一个文件夹中,然后尝试执行它。问题是...一些反病毒程序不允许这样做。

作者知道这个问题,但拒绝采取任何措施。文件夹名称是随机的,因此无法添加到您的反病毒程序可能使用的任何豁免列表中。

再次强调,作者知道这个问题,并建议我告诉我的用户在安装过程中关闭他们的反病毒程序。(就像那会发生一样)


5
那是反病毒软件的问题。INNO设置所做的事情是完全合理和有效的。这也比将所有内容卸载到临时文件夹并从那里运行要优越。 - bruceatk

0

我的建议是尽可能保持安装程序的简单性。Windows Installer 是一款非常复杂的软件,当出现问题时很难弄清楚发生了什么。我相信我们都经历过 Windows Installer 无休止地尝试修复一个你已经没有源 .msi 文件的文件的无限循环。

大多数情况下,使用 Windows Installer 就像用大锤砸螃蟹一样浪费。

我自己使用 InnoSetup,而在工作中则被迫使用 InstallShield(不情愿)。从一个简单的基于脚本的安装程序开始,只有在有充分理由时才使用 Windows Installer。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接