我需要安装一个由多个文件组成的程序,就像大多数Windows程序一样。但是:
它需要在没有管理员的情况下工作。该应用程序通常放在Application-Local文件夹中(%APPDATA%下)。
不得显示任何UI或提示(如果没有错误)。现有代码只是将所有内容提取到app-local目录,然后运行它。 (它比这更聪明,但它表明在这种情况下使用ad-hoc代码是多么简单)
下载一些文件。可能不需要或在更新中未更改的文件不会出现在自解压EXE中,但应从URL下载。
C ++运行时DLL通常存在于System32中,来自以前使用官方可再发行MM的应用程序。但如果没有,请将文件下载到app-local目录。这与(3)的不同之处在于,不是查看目标位置中是否已存在相同的文件,而是查看LoadLibrary是否有效。 (同样适用于已安装的TTF字体)
我只是看着WiX文档页面而感到不知所措,并想知道这是否适合使用WiX。那么,您是否可以指出有关如何执行这些操作的具体说明?
感谢。
答案 0 :(得分:2)
只使用Windows Installer,没有。 Windows Installer始终显示至少一个非常小的启动UI,或者,如果使用适当的命令行参数调用,则根本不显示,即使存在错误。
您可以使用Windows Installer API安装MSI来控制显示的UI数量并显示您自己的UI,包括出错。但是,WiX为您提供了一个平台。
WiX Toolset有一个用于MSI和EXE的bootstrapper / bundler / chainer / downloader / reboot处理程序/包管理器。由于它的引擎被称为“刻录”,因此使用它创建的引导程序有时被称为“刻录包”。 Burn有一个应用程序问题的扩展点,例如UI,称为引导程序应用程序。标准引导程序应用程序始终显示UI。您可以用C ++或.NET编写自己的。
那就是说,你应该意识到两件事。 Windows Installer是一个组件管理器。它有一个可以在产品之间共享的已安装组件(例如文件)的数据库。它不适合作为自解压存档。 WiX引导程序有点类似,是一个包管理器。它有一个已安装软件包的数据库,可以跨产品共享。它不仅仅是一个引导程序。
我不太确定你的观点4.使用供应商的安装程序正确安装可再发行组件更为清晰,理想情况下,这些安装程序可以静默运行,并可以自行检查以前的安装并快速退出成功。但是,如果您找到有关如何通过文件或注册表搜索检查以前安装的文档,则可以在WiX引导程序中声明这些文档以绕过下载和安装这些软件包。
在WiX引导程序中,可以将程序包标记为永久性,以便在卸载产品时不会卸载它们。这可能适用于C ++运行时。这样,卸载时不会破坏不使用WiX引导程序的产品。
BTW-WiX本身和Visual Studio使用WiX引导程序。