static int RunProgram(string exe, params string[] args)
{
ManualResetEvent mreProcessExit = new ManualResetEvent(false);
ManualResetEvent mreOutputDone = new ManualResetEvent(false);
ManualResetEvent mreErrorDone = new ManualResetEvent(false);
ProcessStartInfo psi = new ProcessStartInfo(exe, String.Join(" ", args));
psi.WorkingDirectory = Environment.CurrentDirectory;
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.ErrorDialog = true;
Process process = new Process();
process.StartInfo = psi;
process.Exited += delegate(object o, EventArgs e)
{
Console.WriteLine("Exited.");
mreProcessExit.Set();
};
process.OutputDataReceived += delegate(object o, DataReceivedEventArgs e)
{
if( e.Data != null )
Console.WriteLine("Output: {0}", e.Data);
else
mreOutputDone.Set();
};
process.ErrorDataReceived += delegate(object o, DataReceivedEventArgs e)
{
if (e.Data != null)
Console.Error.WriteLine("Error: {0}", e.Data);
else
mreErrorDone.Set();
};
process.EnableRaisingEvents = true;
Console.WriteLine("Start: {0}", process.StartInfo.FileName);
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
if (process.HasExited)
mreProcessExit.Set();
while(!WaitHandle.WaitAll(new WaitHandle[] { mreErrorDone, mreOutputDone, mreProcessExit }, 100))
continue;
return process.ExitCode;
}
分享到:
相关推荐
在C#编程中,操作外部exe执行程序是一个常见的需求,特别是在需要调用其他应用程序或服务进行数据处理或功能扩展时。本文将详细解析如何在C#中打开、控制以及关闭外部exe执行程序,确保程序的稳定性和资源的有效管理...
在C#编程中,调用外部程序是一项常见的任务,它允许我们与系统或者其他应用程序进行交互。这个名为"C#调用外部程序.zip"的压缩包文件很可能是包含了一个示例项目,演示了如何在C#中使用`System.Diagnostics.Process`...
2. **进程和线程**:每个运行的应用程序都是一个进程,而进程中执行的代码片段则称为线程。我们需要获取目标程序的进程ID,并找到包含ListView控件的线程。 3. **Win32 API**:C#虽然提供了丰富的类库,但在处理...
检查并调整应用程序池的身份验证方式(如使用网络服务账户或特定的用户账户),以确保有足够的权限执行外部程序。 #### 2. 路径问题 代码中硬编码的路径(如“D:\\pdfSwfReader\\cmd.exe”)可能在部署后的服务器...
在C#编程语言中,事件和委托是两个非常重要的概念,它们在实现面向对象编程中的事件驱动模型中起到关键作用。本文将深入探讨这两个概念,并结合提供的代码片段进行解释。 首先,让我们理解什么是委托。委托在C#中...
在Python中,我们可以使用`subprocess`模块来执行外部程序。例如,`subprocess.Popen()`函数用于创建一个新的进程,而`subprocess.call()`或`subprocess.run()`则可以等待该进程完成并返回其退出状态码。 ```...
// 使用此命名空间中的类来执行外部程序。 ``` 2. **事件处理函数**:`private void timer1_Tick(object sender, System.EventArgs e)`。这个方法是在定时器触发时执行的函数。 - **条件判断**:通过比较当前...
**描述:** 本代码片段说明了如何使用 `Process.Start` 方法启动外部程序。 ```csharp using System; class Test { static void Main(string[] args) { System.Diagnostics.Process.Start("notepad.exe"); } }...
另外,为了得到算法的执行时间,我们需要确保测量的是纯算法的运行时间,不包含输入/输出、垃圾回收等外部因素的影响。这可以通过多次运行并取平均值,或者使用诸如`System.Environment.TickCount`这样的方法来排除I...
这些事件在 `ѧ` 类的方法 `ٵ()` 和 `Ҫʮ()` 中被触发,分别代表学生进行了某项活动和学生要求补课的情况。 ### 事件处理器 `ʦ` 类定义了事件处理器,即 `AA` 和 `BB` 委托类型对应的实现方法。这些处理器方法...
`CreateNoWindow`为`true`表示不创建新窗口执行外部程序。 5. `ps.Start()`启动所选文件。 接下来,我们看看如何通过Win32 API的`ShellExecute`函数来执行外部文件。`ShellExecute`函数提供了一个灵活的方式来执行...
`Process`类允许我们启动外部程序并与其交互,包括读取或写入标准输入/输出流。这种机制特别适合执行那些原本需要在DOS命令行下运行的操作,从而在C#应用程序中无缝集成这些功能。 ### 实现细节 在给定的代码片段...
在深入探讨C#事件机制之前,我们先简要回顾一下事件的基本概念。在面向对象编程中,事件是一种通知机制,允许一个对象(事件发布者)向其他对象(事件订阅者)发送信号,表明某些事情已经发生。这种机制是实现观察者...
在 C# 中,如果需要执行外部命令或调用其他应用程序,可以使用 `System.Diagnostics.Process` 类。此示例中的代码展示了如何使用该类来调用命令行并执行特定命令。 ```csharp Process myProcess = new Process(); ...
在C#中,我们通常使用`DllImport`属性来导入外部的非托管DLL(动态链接库),从而调用这些API函数。 3. **系统电源管理API**:在Windows中,有若干API函数可以控制系统的电源管理,如`SetThreadExecutionState`,这...
可以直接在文本框里输入C#测试代码并执行,用于代码片段的运行测试,或通过简单地编码获取运行结果,需要.net frameword 4.0支持,原创小程序,比较简陋
在C#中,可以通过调用`Process`类来执行外部程序或批处理文件,这对于自动化任务特别有用: ```csharp private void button1_Click(object sender, System.EventArgs e) { Process pro = new Process(); pro....
关于批处理运行,C#可以通过`System.Diagnostics.Process`类来启动和控制外部程序(批处理文件)。例如: ```csharp ProcessStartInfo startInfo = new ProcessStartInfo("path_to_batch_file.bat"); startInfo....
标题 "C# 将dll文件打包进exe可执行文件中" 涉及的核心知识点是C#编程语言中关于程序打包和资源嵌入的技术。在软件开发过程中,开发者经常需要引用外部dll(动态链接库)文件来扩展功能或使用第三方库。然而,独立的...
本项目“C#Window服务编程demo”聚焦于创建和管理Windows服务,这是一种在后台运行的应用程序,通常用于执行自动任务或提供持续的服务,即使没有用户登录到系统也是如此。下面将详细阐述Windows服务的概念、C#中实现...