如何使用C#在cmd中以管理员身份运行msi安装程序

15

我有一个MSI安装程序,需要从C#中以静默方式安装它

Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WorkingDirectory = @"C:\temp\";
process.StartInfo.Arguments = "msiexec /quiet /i Setup.msi ADDLOCAL=test";
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit(60000);

注意,如果我以管理员身份手动从命令提示符中运行cmd命令,则其可以正常工作。

当我运行它时,我只能得到以管理员身份运行的命令提示符界面,但命令不会执行。


2
这段代码有什么问题吗?有任何错误信息吗? - Patrick Hofman
请查看此链接 https://dev59.com/S2Qn5IYBdhLWcg3wVFwv - kishore V M
当我运行它时,我只得到了管理员模式下的cmd屏幕,但命令没有执行。 - Ateeq
我知道这一点,但我需要静默安装MSI文件。 - Ateeq
是的,但我收到了一个异常:系统找不到指定的文件。 - Ateeq
显示剩余11条评论
2个回答

14

正如V2Solutions的MS团队所提到的,解决方案是更改以下内容。

process.StartInfo.FileName = "msiexe.exe" 

代码将会是:

Process process = new Process();
process.StartInfo.FileName = "msiexec";
process.StartInfo.WorkingDirectory = @"C:\temp\";
process.StartInfo.Arguments = " /quiet /i Setup.msi ADDLOCAL=test";
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit(60000);

这对我有效 :)


5
这也将帮助您:
Process process = new Process();
process.StartInfo.FileName = "msiexec.exe";
process.StartInfo.Arguments = string.Format("/qn /i \"{0}\" ALLUSERS=1", @"somepath\msiname.msi");
process.Start();
process.WaitForExit();

字符串格式化是我所缺失的部分。 - Gregg L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接