是的,有很多文章与安装 MSI 软件包时提升权限相关。我对这个问题有一个转折,我找不到一个好的答案。如果我以用户身份登录并运行我的 MSI 提升代码(如下),则程序包会安装,但当前用户操作是对我提升安装程序的用户执行的。
例如,如果 MSI 将文件添加到当前用户的桌面。提升(以“Joe Admin”身份运行)的结果是文件被放在 Joe Admin 的桌面上 - 而不是当前登录的用户(“Sally 用户”)。我拥有提升为 Joe 的软件,但将文件放在 Sally 的桌面上,就好像她安装了它一样。-我想自己写。这是在 Windows 7 机器上,UAC 已关闭。
这是非工作代码。(Sally 已登录,在 Joe 时提升 -File 转到 Joe 的桌面)(LoadUserProfile 属性试图解决此问题 - 无效)。
Process watchThis = ImpersonateInstaller(@"c:\temp\Test.msi", "SuperJoePassword");
watchThis.WaitForExit();
private static Process ImpersonateInstaller(string msiPath, string Password)
{
Domain d = Domain.GetCurrentDomain();
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.LoadUserProfile = true;
process.StartInfo.FileName = @"C:\Windows\System32\msiexec.exe";
process.StartInfo.Arguments = string.Format(@"/i {0} REBOOT=ReallySuppress /qb-", msiPath);
process.StartInfo.WorkingDirectory = Environment.GetEnvironmentVariable("WINDIR");
process.StartInfo.UserName = "JoeAdmin";
process.StartInfo.Password = new SecureString();
process.StartInfo.Domain = d.ToString();
foreach (char c in Password.ToCharArray())
{
process.StartInfo.Password.AppendChar(c);
}
process.Start();
return process;
}