2

WindowsUpdateのサイレントインストールで小さな問題が発生しています。なぜ私はそれが必要ですか?私はwin7を再インストールするために使用しているシステムディスクのビットコピーを持っています(.netフレームワーク、ビジュアルスタジオ、Java、および50以上の別のアプリが一度にインストールされているという利点があります)。次に、いくつかの重要な更新をインストールする必要があります。私はc#で小さなユーティリティをコーディングしましたが、を使用してもインストールがサイレントではないことを除いて、正常に動作してい startInfo.Arguments = "/quiet/norestart/passive";ます。サイレントではない:最後にインストールまたは再起動のオプションが必要かどうかを尋ねるようなウィンドウが少なくとも2つあることを意味します。

問題は別のフォーラムで話されています人々はどのようにHOTFIXES.msuファイルを展開していますか? しかし、解決策は私には少し明確ではありません。誰かがそれを修正する方法を知っていますか?繰り返しになりますが、startInfo.Arguments = "/quiet/norestart/passive"; またはstartInfo.Arguments = @"/qb!"+ "REBOOT=ReallySuppress"+ @"/qn"; 機能しておらず、リンクされている理由が説明されています。 textBox1.Text1つのディレクトリ内のすべての修正プログラムと更新プログラムの場所です。

{{

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

        }
4

2 に答える 2

1

最初は、スペースなしで引数を連鎖させているだけなので、おそらく機能しない単一の引数しか渡していません。試す

startInfo.Arguments = "/qb! REBOOT=ReallySuppress /qn"
于 2012-05-31T07:19:25.043 に答える
0

最後に、純粋な 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";

    }
于 2012-06-02T14:46:01.040 に答える