静默安装 .msu Windows 更新

本文关键字:更新 Windows msu 安装 静默 | 更新日期: 2023-09-27 18:35:46

我在Windows更新静默安装时遇到了小问题。为什么我需要它?我有系统磁盘的位副本,我正在使用它重新安装win7(具有.net framework,Visual Studio,java和50 +其他应用程序的优势)。然后我需要安装一些重要的更新。我用 c# 编写了小的 utillity,工作正常,除了即使使用 startInfo.Arguments = "/quiet/norestart/passive"; 安装也不会静音。不沉默 :我的意思是至少有两个窗口,例如询问我最终是否需要安装或重新启动选项。

在另一个论坛上说出了问题,人们如何部署修补程序 .msu 文件?但是解决方案对我来说有点不清楚。有人知道如何解决它吗?同样,startInfo.Arguments = "/quiet/norestart/passive"; startInfo.Arguments = @"/qb!"+ "REBOOT=ReallySuppress"+ @"/qn"; 不起作用,并在链接中解释了原因。 textBox1.Text是所有修补程序和更新在一个目录中的位置。

{

        string[] filePaths = Directory.GetFiles(textBox1.Text);
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = true;
        startInfo.UseShellExecute = true;
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        //startInfo.Arguments = "/quiet/norestart/passive";
        for (int i = 0; i < filePaths.Length; i++)
        {
            label1.Text = "Working";
            startInfo.FileName = filePaths[i];
            startInfo.Arguments = @"/qb!"+ "REBOOT=ReallySuppress"+ @"/qn";
            try
            {
                Process.Start(startInfo.FileName).WaitForExit(); 
            }
               catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        label1.Text = " Done ";
        }

静默安装 .msu Windows 更新

首先,

您只是将没有空格的参数链接在一起,因此只传递一个可能不起作用的参数。尝试

startInfo.Arguments = "/qb! REBOOT=ReallySuppress /qn"
最后,

我使用纯CMD行绕过了它。静默安装,无窗口,例外情况除外。

private void button1_Click(object sender, EventArgs e)
    {
        string[] filePaths = Directory.GetFiles(textBox1.Text);
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.UseShellExecute = false;
        process.EnableRaisingEvents = false;
        for (int i = 0; i < filePaths.Length; i++)
        {
            if (i == 0) { label1.Text = "Working On first task"; }
            process.StartInfo.Arguments = "/C " + "@" + "'"" + filePaths[i] + "'"" + " /quiet /norestart";
            process.Start();
            process.WaitForExit();
            label1.Text = (100 * i / filePaths.Length).ToString() + " % is done"; 
        }
        label1.Text = "Done";
    }