题
我正在尝试使用MSIEXEC构建更新程序来卸载程序,然后安装较新的版本。
这是我的代码:
command = "/x{[uninstall string here]}";
command += "/qn+ /Le c:\\test\\msilog.txt";
ProcessStartInfo psi = new ProcessStartInfo("msiexec");
psi.Arguments = command;
//psi.UseShellExecute = true;
//psi.Verb = "runas";
Process.Start(psi);
我有
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
设置在我的清单中,并将其设置为应用程序的清单。当我运行此过程时,我会得到弹出框,上面说“ appsetup失败”,日志文件说
错误1730。您必须是删除此应用程序的管理员。要删除此应用程序,您可以作为管理员登录,或与您的技术支持小组联系以寻求帮助。
但是,如果我以管理员的身份运行CMD,然后输入
msiexec /x{[uninstall string here]} /qn+ /Le c:\\test\\msilog.txt
它效果很好,花花公子。
我在这里想念什么?
(我还尝试了上面的这两行的删除,因为这是我发现作为管理员运行的一种方式,但是即使设置了 /qn,它也会在尝试执行之前弹出UAC对话框。)
解决方案
为了提升过程,您需要让用户批准它。如果每个过程都可以在没有用户互动的情况下提升自己,那么它将在某种程度上打败高程的目的。
我不知道您的完整情况,但是如果您可以从本地服务帐户执行更新程序,那么这应该在无需用户互动的情况下工作。想到的几种方法是安装Windows服务,本地服务帐户的运行/运行/Runonce键,或使用-s使用PSEXEC。当然,要实现这一目标,您需要在客户机器上拥有正确的权限。
祝你好运。
*还有一件事:如果您尚未研究此信息,则可以使用Windows Installer更新安装,而无需编写自己的“更新程序”。有3种不同类型的更新(小型更新,次要升级和主要升级): http://msdn.microsoft.com/en-us/library/aa370579(vs.85).aspx
重大升级卸载了以前的版本,并安装了较新版本,该版本与您所描述的最相似,尽管在大多数情况下,小更新和较小的升级更合适。
不隶属于 StackOverflow