我正在尝试使用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

重大升级卸载了以前的版本,并安装了较新版本,该版本与您所描述的最相似,尽管在大多数情况下,小更新和较小的升级更合适。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top