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

Visual studio Visual Studio安装项目-快捷方式导致安装回滚,visual-studio,installation,setup-project,Visual Studio,Installation,Setup Project,我有一个有很多插件和配置文件的项目。现在我正在为它做一个VisualStudio安装项目 我不想将每个配置文件手动添加到安装项目中,因此我想这样做: 创建一个空的zip文件,比如config.zip,并将其添加到安装项目中 添加预构建操作以将所有配置文件压缩到config.zip中 添加一个自定义操作,该操作运行将config.zip解压到正确文件夹的vbs脚本,并将其删除 vbs脚本如下所示: sArchiveName=“Config.zip” sLocation=“C:\Data\Con

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

  • 创建一个空的zip文件,比如config.zip,并将其添加到安装项目中
  • 添加预构建操作以将所有配置文件压缩到config.zip中
  • 添加一个自定义操作,该操作运行将config.zip解压到正确文件夹的vbs脚本,并将其删除
vbs脚本如下所示:

sArchiveName=“Config.zip”
sLocation=“C:\Data\Configurations”
Set of so=CreateObject(“Scripting.FileSystemObject”)
设置oShell=CreateObject(“Wscript.Shell”)
oShell.Run“”&s7zLocation&“7z.exe”“x”&sLocation&“\”&sArchiveName&“-aoa-o”&sLocation,1,True
“---如果我取消对以下两行的注释,
“---当我单击快捷方式时,安装将回滚。
’---如果我离开他们,捷径就行了。
'Set f=oFSO.GetFile(sLocation&“\”&sArchiveName)
“f.删除True
我的问题是,我在“程序”菜单中添加的快捷方式会导致安装回滚。原因是在安装过程结束时删除了config.zip。如果我离开它,一切都会好起来。


我在谷歌上搜索了一个解决方案,但找不到任何东西,有人能帮我吗?

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

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

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

在您发布的脚本中,s7zLocation似乎未初始化


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

这似乎是一个自我修复问题

  • 自我修复是Windows Installer的一项核心功能,它可以在通过“”启动软件时检查软件是否正确安装(本质上是一种特殊类型的快捷方式,指向Windows Installer功能,而不是直接指向文件-请参阅提供的链接中的详细信息)
  • Windows Installer会跟踪您的zip文件并发现该文件丢失,从而正确触发对安装的修复
  • 没有很好的解决方案,因为您的部署设计不完善。MSI是专门为这种方式设计的,您不能禁用此“自我修复”功能。一旦安装了zip文件,就会对其进行跟踪
  • 如果你真的想了解自我修复,这里有一个很长的答案,但它通常过于详细,如果事先不知道它是什么以及它是如何工作的,就很难理解。仍在添加链接以供参考:
  • 处理此问题的最简单方法是通过MSI文件正确安装配置文件,并删除整个zip文件。这些配置文件将在安装后更新,还是将被视为只读
  • Visual Studio安装项目非常基本。现在创建MSI文件的推荐方法是使用WiX工具包。这是一个用于创建MSI文件(Windows Installer文件)的新框架,它允许您以XML文件的形式编写安装,然后将其编译为MSI二进制文件。这是一个非常优雅的工具包,但有一个学习曲线
  • 也许可以检查此答案以了解WiX上的更多上下文:。如果下载并安装WiX工具包和visualstudio插件,您将获得允许创建WiX-XML包文件的新项目类型
  • 以下是关于“WiX的起源”的答案:。从本质上讲,这是其创建背后的基本原理

感谢您的回答,vbs脚本可以正常工作,无论如何,我用它更新了我的问题以澄清我的问题。请看一下脚本末尾的注释。我只想再次指出,s7zLocation未在脚本中初始化。我同意,但可能
7z.exe
位于路径中,或者甚至可能安装到与VBScript相同的文件夹中,以便
s7zLocation
中的空字符串无关紧要@simone cifani:如果它只是在路径中,我想它永远不会在目标系统上工作(除非7z.exe安装程序更新系统路径并且在每个目标系统上)。顺便说一句,我发现解压一个大型部署反模式。您假设从msiexec.exe调用与作为交互用户从资源管理器窗口双击VBScript相同。见我的补充评论。我只是在理论上,因为OP声称脚本运行正常。如果他是从GUI(必须是“完成”对话框)以即时模式运行,或者是在InstallExecuteSequence中的InstallFinalize之后运行,该怎么办?在这种情况下,他应该有一个用户上下文。不知何故,它是在工作,但我相信它不是在一个可靠的方式。这是一个自我修复的问题,我明白这一点。但我认为有一种方法可以告诉Windows Installer不要跟踪特定的文件。这个项目有很多插件是由不同的人开发的,所以我想避免每个人都必须投入到安装项目中。现在我意识到这是不可能的,谢谢!有一条路,但我担心它会把你引入歧途。如果设置了
空白组件GUID
,则将安装该文件,但不会跟踪或卸载-这将消除自修复。似乎是解决你问题的办法,