如何为具有不同 Windows 权限的用户控制 post- 安装程序的行为

How to control post-install behavior of a program for users with different Windows permissions

我有一个 Visual Studio 安装程序安装项目,它输出一个 .msi 文件用于在系统上安装。我正在使用 Visual Studio Pro 2013 和 .Net 4.0。

该应用程序主要供非管理员 Windows 7 用户使用。但是,由于用户限制,该程序安装在管理员帐户的计算机上,InstallAllUsers 设置为 True

部署项目在桌面和程序菜单中添加快捷方式。

安装完成后,移除安装程序的闪存驱动器,通过管理员帐户的快捷方式手动启动应用程序没有问题。

但是,当使用创建的快捷方式在非管理员帐户上首次启动应用程序时,会遇到问题。这是发生以下错误的地方:

An installation package for the product MyApp cannot be found. Try the installation again using a valid copy of the installation package 'MyApp.msi'.

有趣的一点是,如果我尝试直接从 Program Files 文件夹启动可执行文件,它工作得很好。我什至可以手动创建一个快捷方式,这也能正常工作。最后,如果我确实将程序定向到闪存驱动器中的 .msi 文件,问题就会消失。但这是手动密集型操作,尤其是当它必须在计算机上的多个非管理员帐户上完成时。我希望能够在管理员帐户上安装一次程序然后忘记。

为什么会出现此错误?为什么 Windows 在安装应用程序后寻找 .msi 文件?有没有办法通过更改部署项目中的一些 属性 来避免它?

经过更多研究,我发现 Windows 尝试查找安装文件的原因是因为在 Visual Studio 安装程序安装项目中创建的快捷方式是广告快捷方式(相对于非广告快捷方式).公布的快捷方式让 Windows 通过替换快捷方式指向的任何丢失文件来修复安装(类似问题 here)。

似乎 Visual Studio 安装程序安装项目不支持非广告的快捷方式,尽管可以诱骗它们来安装它们(更多信息 here)。

此外,我的安装项目一定也有问题,因为在启动时 Windows 认为它需要修复。因此,我决定从 Visual Studio 安装程序安装项目切换到 WIX。 WIX 应该可以更好地控制我想要安装的内容,虽然我不打算使用非广告快捷方式,但它支持它们。