C# WinForms アプリケーション (.NET 4)
ディレクトリ パスは、コンボ (ドロップダウン) メニューから選択され、次のコマンド ライン ステートメントに含まれます。
for %f in ("< path >\*.ocx" "< path >\*.dll") do regsvr32 /s "%f"
ここで、< パス >はディレクトリ パスです。
これはうまく実行されます。ユーザーが表示されるポップアップ/メッセージ ボックスに対して [OK] を何千回もクリックしなくても、登録成功メッセージ (またはエラー) を取得したいと考えています。明らかに、サイレント (/s) スイッチはポップアップを取り除きます。
ユーザーが画面に (アプリケーション自体以外に) 何も表示せずに結果を取得する最良の方法は何でしょうか?
これは私が今持っているものです。
public void reg_in_source_2()
{
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardInput = true;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.CreateNoWindow = true;
Process cmdProcess = new Process();
cmdProcess.StartInfo = cmdStartInfo;
cmdProcess.ErrorDataReceived += cmd_Error;
cmdProcess.OutputDataReceived += cmd_DataReceived;
cmdProcess.EnableRaisingEvents = true;
cmdProcess.Start();
cmdProcess.BeginOutputReadLine();
cmdProcess.BeginErrorReadLine();
cmdProcess.StandardInput.WriteLine(@"for %%f in (""" + reference.source_folder + @"\*.ocx"" " + reference.source_folder + @"\*.dll"") do regsvr32 ""%%f""");
cmdProcess.StandardInput.WriteLine("exit");
cmdProcess.WaitForExit();
}
public void cmd_DataReceived(object sender, DataReceivedEventArgs e)
{
reference.cmd_replies.Add(e.Data);
}
public void cmd_Error(object sender, DataReceivedEventArgs e)
{
reference.cmd_replies_errors.Add(e.Data);
}