首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从命令行检索regsvr32执行结果(没有消息框/弹出窗口)

从命令行检索regsvr32执行结果(没有消息框/弹出窗口)
EN

Stack Overflow用户
提问于 2013-03-11 15:49:04
回答 2查看 1.8K关注 0票数 0

C# WinForms应用程序(.NET 4)

从组合式(下拉)菜单中选择目录路径,然后将其包含在下面的命令行语句中。

代码语言:javascript
运行
复制
for %f in ("< path >\*.ocx" "< path >\*.dll") do regsvr32 /s "%f"

其中< path >是目录路径。

这个执行得很好。我想检索注册成功的消息(或错误),而不需要用户在弹出/消息框中单击OK一千次。显然,静音(/s)开关可以消除弹出窗口。

在用户看到屏幕上的任何内容(除了应用程序本身)的情况下,检索结果的最佳方法是什么?

这就是我现在的情况,

代码语言:javascript
运行
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-11 16:09:54

不要尝试将批处理脚本写入cmd进程,而是使用Directory.GetFiles("c:\\somepath\\", "*.dll;*.ocx")获取要注册的文件--然后使用process.start启动regsvr32进程(带有/silent参数),并检查返回代码以确定您是否成功。

如果您尝试在脚本中这样做,您将只获得cmd进程的返回代码,而不是您感兴趣的regsvr32进程的返回代码。

票数 2
EN

Stack Overflow用户

发布于 2013-03-11 16:08:10

请通过设置Environment.Exit(代码)从控制台应用程序返回退出代码。

可以将退出代码设置为此stackoverflow answer中的链接。

默认值为0(零),表示该进程已成功完成。使用非零数字表示错误。在应用程序中,可以在枚举中定义自己的错误代码,并根据方案返回适当的错误代码。

所有错误代码都可以将状态消息映射到它们,然后可以记录这些消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15342874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档