如何设置 wix msi 以运行管理员广告
Posted
技术标签:
【中文标题】如何设置 wix msi 以运行管理员广告【英文标题】:How to set wix msi to run advertised by admin 【发布时间】:2014-12-02 15:31:26 【问题描述】:我有一个程序可以在找到更新版本的 MSI 时自动更新。我曾经使用 VS2008 安装项目创建 MSI。我将开发迁移到 VS2013,丢失了 Setup 项目,尝试了 IS,非常沮丧,最终选择了 WIX。
使用 WIX 创建的 MSI 可以满足我的所有需求,但在自动更新逻辑中失败:
因为程序可以在受限用户帐户下运行,所以当它检测到较新的 MSI 时,它首先会使用管理员的凭据对其进行广告宣传。这些凭据以加密方式存储在 XML 文件中。 然后,一旦 MSI 被公布,它就会与当前用户一起启动。代码(简称)
Process^ advertise = this->advertiseMSI(shortpath,mydomain,myusername,mypassword);
advertise->WaitForExit();
Process^ install = this->installMSI(shortpath);
advertiseMSI
在哪里:
Process^ process = gcnew Process();
process->StartInfo->UseShellExecute = false;
process->StartInfo->FileName = "C:\\Windows\\System32\\msiexec.exe";
process->StartInfo->Arguments = "/jm " + "\"" + msiPath + "\"";
process->StartInfo->WorkingDirectory = Environment::GetEnvironmentVariable("WINDIR");
process->StartInfo->UserName = userName;
process->StartInfo->Password = this->getSecureString(Password);
process->StartInfo->Domain = userDomain;
process->StartInfo->Verb = "runas";
process->Start();
return process;
而installMSI
只是在当前用户的静默安装中启动 Msiexec。
这适用于使用 VS2008 创建的 MSI,但使用 WIX MSI 失败。 msiexec 的日志是:
“错误 1730。您必须是管理员才能删除此应用程序...”
如果我手动运行 MSI,以管理员身份登录时它可以工作,但以用户身份登录时它会失败并且不会要求提升权限。
我在 Package 部分设置了InstallPrivileges="elevated" InstallScope="perMachine"
并没有什么不同(我已经尝试了所有可能的组合)。在我看来,MSI 没有广告,但代码没有失败。看起来 MSI 总是以有限的权限运行。
我也尝试在产品的唯一一个 Feature 中设置AllowAdvertise="yes"
。
我可以看到使用 VS2008 生成的 MSI 的一个主要区别是后者有两个功能,管理员和用户。
【问题讨论】:
【参考方案1】:我不知道您是否还在为这个问题苦苦挣扎,但我在使用NSIS 构建的安装程序时遇到了类似的问题,所以也许这会对您或其他人有所帮助。在我的情况下,我能够通过使用命令 shell 间接来克服这个问题,如下所示(C# 代码):
ProcessStartInfo processInfo = new ProcessStartInfo("cmd", "/C myapp_installer.exe /S /D"); // Options /S /D apply to myapp_installer.exe.
processInfo.UseShellExecute = false;
processInfo.Domain = domain;
processInfo.UserName = username;
processInfo.Password = password; // Obtain securely not hard-coded.
Process process = Process.Start(processInfo);
当直接调用安装程序无法通过所需的凭据时,我无法完全解释为什么会这样,但我很确定这与 Chris Jackson on the MSDN Blog 解释的内容有关,顺便提一下the answer to your related question.
我希望这会有所帮助!
【讨论】:
是的,我仍在努力寻找它的根源。我一定会尝试你的建议,但我认为这是一种解决方法。我确信我在 wix 安装程序中做错了,因为当我使用 VS2008 安装项目进行部署时,它运行完美。我已经阅读了很多关于 msiexec 如何处理管理员凭据的内容,并且看到了很多可能导致此问题的原因,但仍然无法解决。无知是盲目的! :) 我同意这是一个 hacky 解决方法。你确定你在使用VS2008部署项目时,部署环境和Windows Installer的版本是一样的吗?也许您已经知道,但 Windows UAC 仅在 Vista 中引入。我不知道旧版本的 Visual Studio 是否可能使用了回避 UAC 某些方面的后门,但我不会感到惊讶。感谢 Microsoft 让我们不断猜测。以上是关于如何设置 wix msi 以运行管理员广告的主要内容,如果未能解决你的问题,请参考以下文章