【发布时间】:2013-03-11 15:49:04
【问题描述】:
C# WinForms 应用程序 (.NET 4)
从组合(下拉)菜单中选择目录路径,然后将其包含在以下命令行语句中。
for %f in ("< path >\*.ocx" "< path >\*.dll") do regsvr32 /s "%f"
其中是目录路径。
这执行得很好。我想检索注册成功消息(或错误),而用户不必在显示的弹出/消息框中单击确定一千次。显然,静音 (/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);
}
【问题讨论】:
-
您是否尝试获取退出代码?通常如果它是 0 表示成功
-
我没有,你有没有偶然的链接或例子?
-
在 WaitForExit 进程之后看起来像
reference.cmd_exit_code = cmdProcess.ExitCode;。这将如何工作,因为我需要知道的不仅仅是单个文件没有注册,我还需要知道有多少失败。我想我可以为目录中的每个文件启动一个注册过程...捕获退出代码并在总操作结束时计算结果。 -
你为什么要写一个批处理脚本到 cmd 进程,而不是在代码中找到文件然后在这些文件上执行 regsvr32?
标签: c# command-line regsvr32