2014-12-02 65 views
0

我有一个程序在找到新版本MSI时自动进行自我更新。我曾经用VS2008安装项目创建MSI。我将开发迁移到了VS2013,失去了安装项目,尝试了IS并感到非常沮丧,最后终于用WIX降落。如何将wix msi设置为由admin管理广告运行

微星与维克斯创建做了所有我需要的,但在自动更新逻辑失败:

因为程序可以在一个受限用户帐户运行,当它检测到一个新的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,当它admin身份登录,但记录为作品时用户失败并且不要求提升权限。

我已经在Package部分设置了InstallPrivileges="elevated" InstallScope="perMachine"并且没有什么区别(我尝试了所有可能的组合)。在我看来,MSI没有公布,但代码不会失败。看起来MSI总是以有限的权限运行。 我也尝试在产品的唯一一个功能中设置AllowAdvertise="yes"

我可以看到与VS2008生产的MSI的一个主要区别是后者有两个功能,管理员和用户。

回答

0

我不知道你是否还在努力解决这个问题,但是我遇到了一个类似的问题,用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中引用。

我希望这有助于!

+0

是的,我仍然在试图找到这个根源。我一定会尝试你的建议,但我认为这是一种解决方法。我确信我在wix安装程序中做了错误的事情,因为当我使用VS2008安装项目进行部署时,它工作得非常完美。我已经阅读了很多关于msiexec如何处理管理员凭证,并且看到很多可能导致此问题但仍然无法解决的问题。无知是盲目的! :) – Aznarepse 2015-02-13 09:47:46

+0

我同意这是一个hacky的解决方法。当您使用VS2008部署项目时,您是否确定部署环境和Windows Installer版本相同?也许你已经知道,但Windows UAC只在Vista中引入。我不知道是否Visual Studio的旧版本可能使用了后门,这可能导致UAC的某些方面出现问题,但我不会感到惊讶。感谢微软保持我们的猜测。 – 2015-02-13 20:36:54

相关问题