Visual Studio 安装项目 - 快捷方式导致安装回滚

Visual Studio Setup Project - Shortcuts cause installation rollback

我有一个项目有很多插件和配置文件。现在我正在为它做一个 Visual Studio 安装项目。
我不想手动将每个配置文件添加到安装项目中,所以我想这样做:

vbs脚本如下:

sArchiveName = "Config.zip"
sLocation = "C:\Data\Configurations"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("Wscript.Shell")

oShell.Run """" & s7zLocation & "7z.exe"" x " & sLocation & "\" & sArchiveName & " -aoa -o" & sLocation, 1, True

'--- If I uncomment the following 2 lines, 
'--- as I click on the shortcuts the installation rollbacks.
'--- If I leave them the shortcuts work fine. 
'Set f = oFSO.GetFile(sLocation & "\" & sArchiveName)
'f.Delete True

我的问题是我在程序菜单中添加的快捷方式导致安装回滚。原因是安装过程结束时删除了config.zip。如果我离开它一切正常。

我已经用谷歌搜索了解决方案,但找不到任何东西,有人可以帮助我吗?

这些症状几乎可以肯定意味着您的自定义操作失败,因此安装将回滚。您需要 post 您的 VBScript 以便我们查看。

详细日志应显示脚本失败的地方。执行 msiexec /I [msi 文件路径] /l*vx [日志文件路径]

VBScript 自定义动作中的一个常见问题是使用 WScript 对象,例如 WScript.CreateObject。这将失败,因为 WScript 对象是在 WSH 环境中 运行 时提供的,但在 Windows 安装程序调用期间不会发生这种情况。

在您 post 编写的脚本中,s7zLocation 似乎未初始化。

此外,请注意代码是从 msixec.exe、运行 系统帐户调用的,并且没有任何基础设施可以查看您是否来自 运行交互式用户浏览器环境(例如工作目录)。您需要指定所有正在使用的可执行文件和文件的完整路径。

这好像是自修复问题.

  • 自我修复是一项核心 Windows 安装程序功能,它会在您通过“advertised shortcut”(本质上是一种特殊类型的快捷方式,指向Windows 安装程序功能而不是直接到文件 - 请参阅 link 提供的更多信息)。
  • Windows 安装程序跟踪您的 zip 文件并发现它丢失,因此正确触发安装修复。
  • 这个问题没有很好的解决办法,因为你的部署设计不合理。 MSI 专为这种行为而设计,您无法禁用此 "self-repair" 功能。一旦安装了 zip 文件,它就会被跟踪。
  • 如果你真的想了解自我修复,这里有一个很长的答案,但如果没有事先了解它是什么以及它是如何工作的,它通常过于详细而无法理解。仍然添加 link 以供参考:How can I determine what causes repeated Windows Installer self-repair?
  • 处理此问题的最简单方法是通过 MSI 文件正确安装配置文件,然后删除整个 zip 文件。这些配置文件会在安装后更新,还是会被视为只读?
  • Visual Studio 安装项目 非常基础。目前推荐的创建 MSI 文件的方法是使用 WiX 工具包。这是一个用于创建 MSI 文件(Windows 安装程序文件)的新框架,它允许您将安装编写为 XML 文件,然后编译成 MSI 二进制文件。这是一个非常优雅的工具包,但有一个学习曲线。
  • 也许可以查看此答案以获取有关 WiX 的更多上下文:Wix generate single component id for entire tree。如果您下载并安装 WiX 工具包和 Visual Studio 插件,您将获得允许创建 WiX XML 包文件的新项目类型。
  • 这是 "origin of WiX" 上的回答:Windows Installer and the creation of WiX。本质上是其创建背后的基本原理。