C# 从代码以静默模式启动MSI安装程序
我的任务是开发一个更新代理,在下载msi文件后启动它,安装必须对用户不可见 但是我在没有UI的情况下启动它时遇到了一个问题。我试着使用/q和/qn,但不起作用,它只适用于UI选项C# 从代码以静默模式启动MSI安装程序,c#,windows-installer,silent-installer,C#,Windows Installer,Silent Installer,我的任务是开发一个更新代理,在下载msi文件后启动它,安装必须对用户不可见 但是我在没有UI的情况下启动它时遇到了一个问题。我试着使用/q和/qn,但不起作用,它只适用于UI选项 internal static class MSI_runner { public static bool RunInstallMSI(string sMSIPath) { try { Console.WriteLine("begin");
internal static class MSI_runner
{
public static bool RunInstallMSI(string sMSIPath)
{
try
{
Console.WriteLine("begin");
//Starting to install application
Process process = new Process();
process.StartInfo.FileName = "msiexec.exe";
process.StartInfo.Arguments = string.Format(" /q /i \"{0}\" REINSTALLMODE=amus ", sMSIPath);
Console.WriteLine("start");
process.Start();
process.WaitForExit();
Console.WriteLine("end");
return true;
}
catch
{
// "There was a problem installing the application!
return false; //Return False if process ended unsuccessfully
}
}
}
尝试Catch Exception ex并查看ex.message是什么。 在此处检查msiexec参数:
最有可能的原因是安装需要提升,因此有一些事情会受到影响,但这里有一些猜测,因为您的“但它不起作用”不是很具体 当您在UI模式下运行它时,它可能会要求提升。管理员只会得到一个提升提示,有限的用户将被要求输入管理员凭据。无论哪种方式,它都是高架运行的。当您以静默方式运行它时,提升提示不会显示为静默意味着静默,因此它也会以静默方式失败,因为它需要提升的权限 您的代码几乎肯定默认为ProcessStartInfo.UseShellExecute=true,因此进程的任何凭据都不会用于启动MSI。如果MSI需要提升,而您希望以静默方式安装它,则必须为exe提供提升清单,以便它以其他方式提示或运行提升。您还需要将UseShellExecute设置为false,以便启动是CreateProcess类型的启动,其中进程权限继承到您启动的进程中。此外,也没有真正的必要推出任何产品并介入此类问题。如果进程被提升,那么只需调用msisInstallProduct,并将路径传递到MSI和命令行。然后您就知道安装是以您的权限运行的 假设您的代码正常工作,顺便说一句,不清楚您期望的升级类型。没有提到您的MSI是否有新的ProductCode、ProductVersion等。通过重新安装模式重新安装新的MSI来应用小更新的正常方法如下:
重新安装模式应该是vomus 它不捕获任何它不是异常它不是异常ID您从cmd测试然后需要运行的命令,可能:msiexec不在路径中,或者某些参数不正常,或者与用户权限有关。请参阅“是”尝试过它,并且只有当我以管理员身份运行cmd时,安静模式才起作用