设置&部署项目创建额外的添加/删除程序图标

时间:2017-04-28 17:45:26

标签: windows-installer setup-project msiexec

我有一个奇怪的问题......

我使用Visual Studio 2013在C#中创建了一个基本的WinForms应用程序,并添加了一个Setup&部署项目到解决方案以构建我的.msi安装程序。对于安装和放大部署项目的属性,我将DetectNewerInstalledVersion设置为true,并将RemovePreviousVersions设置为true。然后,对于每个构建,我将增加版本号并让Visual Studio更改ProductCode。最后,我将确保UpgradeCode保持不变。

在此配置中,如果用户运行安装了以前版本的.msi,则会执行升级。一切正常(如在所有文件中更新到新版本等)。但是,当他们打开“添加/删除程序”时,旧版本的图标仍然存在,以及新版本的图标。

例如,如果他们使用.msi安装MyApp 1.1版,然后使用.msi升级到1.2,然后再次升级到1.3,那么MyApp将正确更新到1.3版,但用户会将其卸载控制面板 - >程序和功能 - >卸载程序,将有三个MyApp图标(每个版本一个)。要正确卸载MyApp,他们必须右键单击/卸载所有三个。如果我从注册表中删除旧版本(通常用于过时图标的修复),则MyApp将无法正确卸载。卸载将无错误地通过运动,但程序文件和图标将保留,应用程序仍将正常运行。要进行故障排除,我已经使用顺序版本号进行了一系列构建,然后在文本编辑器中打开每个构建的.vdproj文件,以确保ProductCode和PackageCode已更新,但UpgradeCode保持不变。他们这样做,所以它不是UpgradeCode更改的问题。我还尝试删除旧图标的注册表项。这会使他们脱离程序和功能卸载列表,但它会阻止程序以这种方式正确卸载,因此这不是一个选项。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

第一次安装时会发生这种情况(比方说)每个人都安装了升级只是我(反之亦然)。一种类型不会升级另一种类型,因此如果安装到同一位置,文件将被替换,但在“程序和功能”中将有一个条目。他们都必须是每个人或只是我来取代以前的产品。

您可以使用msiexec / I [msi文件的路径] / l * v [日志文件的路径]安装升级,以查看正在进行的操作。如果您搜索FindRelatedProducts的出现,您应该看到它找到的内容以及它是否是正确的上下文。

请注意,如果您没有管理员权限,Visual Studio安装程序可以更改上下文。您可以指定Everyone安装,但如果您没有权限,Visual Studio会将其更改为Just me。

答案 1 :(得分:0)

确定。奇怪的...

问题来自于它的运行方式。安装完成后,程序会检查网络共享以获取较新的.msi,如果检测到,则下载它,然后使用Process.Start和命令行参数启动它。 StartInfo.Arguments字符串如下所示:

startInfo.Arguments = "/i \"[MSIPATH]\" /log \"[LOGPATH]\"  TARGETDIR=\"[APPPATH]\" /qr+";

我猜有人会在最后尝试UI模式切换。 " / qr +"开关应该是" / qb! - "。当我改变它时,问题就停止了。我不认为" / qr +"甚至是一个有效的开关,所以我不确定为什么安装没有完全失败???无论如何,如果有人看到类似的东西,那就是问题。

特别感谢PhilDW指点我的日志。 : - )