我使用 WixSharp 为我的应用程序创建了一个简单的引导程序。
namespace TestBootstrapper
{
class Program
{
static void Main()
{
var package = new MsiPackage("../testmsi.msi")
{
DisplayInternalUI = true,
Id = "MyId",
Compressed = true,
Visible = true
};
var bootstrapper = new Bundle("MyTestInstaller", package)
{
Version = new Version("1.0.0.0"),
UpgradeCode = new Guid("1FCC927B-7BB0-4FB0-B81E-2D87012E470B"),
PreserveTempFiles = true,
DisableModify = "yes",
DisableRemove = true
};
bootstrapper.Build("Installer.exe");
}
}
}
我以管理员身份登录并安装了该应用程序(使用 Installer.exe),安装过程中事件查看器中没有错误。当我单击快捷方式时,应用程序按预期运行。
如果我跑testmsi.msi
作为标准用户或管理员,它安装时没有任何错误,如果我单击快捷方式,应用程序将按预期运行。
我以标准用户身份登录并安装了该应用程序(使用Installer.exe
)。安装过程中事件查看器中没有错误。但是当我单击快捷方式安装程序时,它会再次运行。
那么,为什么安装程序会运行以及如何防止这种行为?
这是一次修复,效果可能好也可能坏,具体取决于重新安装的内容。应用程序事件日志应包含 MsiInstaller 条目,说明正在修复的内容。这并不一定是一件需要预防的坏事。
假设您进行了每台计算机安装,例如,如果您从 MSI 将文件安装到用户的应用程序数据文件夹中,然后以另一个用户身份登录并运行该应用程序,则该用户的文件显然丢失了。因此,Windows Installer 将为应用程序的缺失部分进行安装。该文件可能是系统的所有用户都需要的,是吗? Windows 假定如果您将文件(或注册表项)安装到用户配置文件位置,则每个登录的人都需要此文件,因此当其他用户登录并使用快捷方式时,它会通过“修复”安装。
还有其他一些修复效果不太好的情况。如果您执行某些操作来删除已安装的文件,Windows 将尝试恢复它。如果您执行按用户安装,但随后以其他用户身份登录并尝试使用不符合产品预期用途的应用程序 - 每台计算机的安装程序即可执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)