Visual studio 2015 RemovePreviousVersions=true,卸载以前的版本,但以静默方式无法安装新版本

Visual studio 2015 RemovePreviousVersions=true,卸载以前的版本,但以静默方式无法安装新版本,visual-studio-2015,windows-installer,upgrade,major-upgrade,Visual Studio 2015,Windows Installer,Upgrade,Major Upgrade,获取了一个旧程序,该程序与InstallShield for VS2013生成的包一起安装。最近升级到VS2015社区,但由于社区没有InstallShield,我不得不用安装程序项目重做我的安装程序。 我已经有了一个可以工作的安装程序,一切似乎都很好,直到我尝试升级。我的安装程序中有一个匹配的UpgradeCode,较大的Version编号,installUsers与旧版本匹配,RemovePreviousVersions设置为true。好吧,一切都应该井然有序 正确运行新安装程序将卸载以前的

获取了一个旧程序,该程序与InstallShield for VS2013生成的包一起安装。最近升级到VS2015社区,但由于社区没有InstallShield,我不得不用安装程序项目重做我的安装程序。 我已经有了一个可以工作的安装程序,一切似乎都很好,直到我尝试升级。我的安装程序中有一个匹配的
UpgradeCode
,较大的
Version
编号,
installUsers
与旧版本匹配,
RemovePreviousVersions
设置为true。好吧,一切都应该井然有序

正确运行新安装程序将卸载以前的版本,GUI看起来就像正确安装新安装程序一样,它甚至会正确显示在“控制面板”的“添加/删除程序”列表中。但是,新版本本应安装到的整个目录丢失了。 再次运行安装程序进行修复,然后真正安装新文件

我错过了什么?为什么它不能一次通过升级?在这种情况下,什么样的调试是可用的

如有任何有用的评论、提示和链接,我们将不胜感激

编辑:发布后,我也尝试过,但没有结果。但我发现65535版本是无效的


谷歌告诉我有一种叫做“重新安装模式”的东西,但我似乎找不到任何能影响它的地方。

首先,感谢@zett42提供的有用评论。你给了我恰到好处的关键词,引导我走向正确的方向,最终引导我找到解决方案

最后,我将
重新安装模式
设置为
amus
,并更改了
删除现有产品
序列值。老实说,我不知道为什么是1525,但它现在可以工作了,根据我之前的测试,一旦从InstallShield安装的软件包迁移完成,我就不需要做所有这些,升级也可以工作了。 无论如何,下面的脚本是基于,在帮助下,甚至是有用的(这一次)

那么,这就是我的add_reinstall_prop.vbs:

set objArgs=WScript.Arguments
设置o_installer=CreateObject(“WindowsInstaller.installer”)
设置o_database=o_Installer.OpenDatabase(objArgs(0),1)
设置o_msieview=o_DataBase.OpenView(“插入属性(属性,值))
值('emustemode','amus'))
omsieview.Execute
set o_msieview=o_DataBase.OpenView(“更新InstallExecuteSequence set Sequence=1525,其中Action='RemoveExistingProducts'))
omsieview.Execute
o_DataBase.Commit
使用PostBuildEvent自动应用它:

%VS\u PBE\u工具\u路径%add\u重新安装\u prop.vbs”“$(Builtoputpath)”

其中%VS_PBE_TOOLS_PATH%是指向目录的环境变量


不知何故,此更改也会影响安装程序项目生成的exe文件,即使afaik I仅在msi包上执行操作,因为PostBuildEvent运行时exe已经存在。如果有人对此有一个简单的解释,我将不胜感激。

启用详细日志记录以查看实际情况
msiexec-i yoursetup.msi-l*v logfile.txt
@zett42 Woah,3k行调试,我看到很多guid和crypyic属性更改注释等。当我阅读它时,是否有任何公共字符串我应该查找?msi(78:E8)[09:47:04:318]:文件:C:\Program Files(x86)\
..
AddIn.dll;覆盖;不会修补;现有文件是较低版本。这看起来很重要是的,所以我很清楚我的问题确实与版本有关,而且可能InstallShield编写的旧文件数量高得离谱。发现我在创建msi后能够复制,所以真正的问题现在变成了,我如何才能这样做,它会影响生成的msi和exe文件msi想先复制新文件,然后删除旧版本--这是可能的,取决于操作的顺序。如果在之后确实删除了旧版本,这可能已经是问题的根源,因为这很难纠正。我建议在
InstallInitialize
之前立即对现有产品进行排序。MSDN声明这是“低效的”,但以我的经验,这是最有效的方法。