Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码以静默模式启动MSI安装程序_C#_Windows Installer_Silent Installer - Fatal编程技术网

C# 从代码以静默模式启动MSI安装程序

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");

我的任务是开发一个更新代理,在下载msi文件后启动它,安装必须对用户不可见

但是我在没有UI的情况下启动它时遇到了一个问题。我试着使用/q和/qn,但不起作用,它只适用于UI选项

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时,安静模式才起作用