我使用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),并且在安装过程中Event Viewer中没有错误。当我单击快捷方式时,该应用程序将按预期运行。
如果我以标准用户或管理员身份运行testmsi.msi
,则安装时没有任何错误,并且如果单击快捷方式,应用程序将按预期运行。
我以标准用户身份登录并安装了该应用程序(使用Installer.exe
)。安装过程中Event Viewer中没有错误。但是,当我单击快捷方式安装程序时,它将再次运行。
那么,为什么要运行安装程序以及如何防止这种行为?
答案 0 :(得分:1)
这是一项维修,根据重新安装的部件而定,它的好坏是可能的。应用程序事件日志应具有MsiInstaller条目,其中包含有关要修复的内容的信息。这不一定是一件坏事,需要预防。
假设您是按机器安装的,例如,如果您从MSI将文件安装(例如)安装到“用户的应用程序数据”文件夹中,然后以其他用户身份登录并运行该应用程序,则该文件显然丢失了对于该用户。因此,Windows Installer将为该应用程序的缺失部分进行安装。该文件可能是系统的所有用户所必需的,是吗? Windows假定,如果您将文件(或注册表项)安装到用户配置文件位置,则每个登录的人都需要此文件,因此当另一个用户登录并使用快捷方式时,将通过“修复”安装该文件。
在其他情况下,修复效果也不佳。如果您执行某些操作来删除已安装的文件,则Windows将尝试还原该文件。如果您是按用户安装,然后以其他用户身份登录,然后尝试使用该产品非预期用途的应用-每台计算机安装一次安装。