Tag: 进程

如何知道Process.Start()创建的进程何时关闭?

我正在使用这个: var proc2 = Process.Start(Path.GetFullPath(filename)); proc2.Exited += (a, b) => { MessageBox.Show(“closed!”); }; 但是我关闭窗口并且没有得到MessageBox.Show(“closed!”); 。 如何解决这个问题?

带有重定向标准流的C#+ telnet进程立即退出

我正在尝试用C#(类似于Tcl Expect包的东西)做一个’脚本telnet’项目,我需要启动一个telnet进程并重定向(和处理)它的stdin / stdout流。 问题是,生成的telnet进程在启动后立即退出(但它确实启动)。 如果我尝试使用-say- cmd.exe执行相同操作,则可以正常工作。 telnet实现是否需要交互式标准输入? 这个概念甚至存在于Windows中吗? 我正在运行Win7 64位,这是否有助于dscribed行为? 这是我使用的片段: Process m_process = new Process(); m_process.StartInfo = new ProcessStartInfo( @”C:\Windows\system32\telnet.exe”, “towel.blinkenlights.nl”); //required to redirect stdXXX m_process.StartInfo.UseShellExecute = false; m_process.StartInfo.ErrorDialog = false; m_process.StartInfo.RedirectStandardInput = true; m_process.StartInfo.RedirectStandardOutput = true; m_process.StartInfo.RedirectStandardError = true; Thread.Sleep(50); Console.WriteLine(” exited? ” + m_process.HasExited); 输出是: 退出? 真正 如果我用这个: … m_process.StartInfo = […]

C#代码不会启动程序。 Win32Exception未处理

我正在创建一个程序,在单击按钮时启动程序。 它似乎适用于Chrome或Word等程序,但不适用于较小的程序,如fraps,并且会给我错误 System.dll中发生未处理的“System.ComponentModel.Win32Exception”类型的exception附加信息:系统找不到指定的文件 private void Fraps_Click(object sender, EventArgs e) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = “fraps.exe”; Process.Start(startInfo); }

C#并行运行多个非阻塞外部程序

我需要从我的应用程序运行多个外部可执行文件的实例。 此可执行文件的平均运行时间约为3分钟。 我想重定向这些进程的输出,并在我的GUI中更新进度条。 当然,在我继续使用我的应用程序之前,我不想等待他们返回。 我想我应该为每个实例创建一个线程,并在线程完成时更新我的​​进度条。 这是正确的方法吗? 另外,您是否建议使用良好的资源/文档来了解它的工作原理? 我发现只有http://www.dotnetperls.com/threadpool 。 编辑:这些进程是基于网络的,即:运行时间可能会有很大差异,具体取决于链路延迟/带宽。 关于进度条,我想在每次进程完成时更新它。 那有处理程序吗? 稍后我将根据流程输出添加更详细的更新,以增加每个执行步骤的进度。 编辑2: 感谢您的投入。 由于我可能需要运行大量进程(最多20个),并且我不想使带宽饱和,因此我将并行运行5个最大值。 每次进程结束时,我都会递增进度计数器(对于我的进度条),然后运行另一个进度计算器直到它们全部完成,使用: Process p = new Process(); p.StartInfo.FileName = pathToApp; p.EnableRaisingEvents = true; p.Exited += OnCalibrationProcessExited; p.Start(); private void OnCalibrationProcessExited(object sender, EventArgs e) { runAnotherOne function } 这是正确的还是有更优雅的方式来实现这一目标? 我不希望我的应用程序在执行过程中被阻止。 为此使用后台工作者会更好吗?

管道输出输出到新过程

我有问题将rtmpdump进程的输出传递给ffmpeg,我相信问题是我的进程正在窃取rtmpdump的输出。 在我的研究中,我听说尝试使用cmd.exe进程并在其中运行rtmpdump.exe作为/ C命令,但是这个问题是我丢失了对从中生成的rtmpdump.exe进程的引用,我需要能够在我的程序中管理多个rtmpdump进程,并有时选择性地杀死某些进程。 我最初尝试过这样简单的事情: var p = new Process(); p.StartInfo.FileName = “rtmpdump.exe”; p.StartInfo.Arguments = “-v -r rtmp://somehost.com/app-name -o – | ffmpeg.exe -loglevel quiet -i – -c:v copy -c:a libvo_aacenc -b:a 128k \”test.mp4\””; 这根本不起作用。 使用“cmd.exe”作为初始进程: var p = new Process(); p.StartInfo.FileName = “cmd.exe”; p.StartInfo.Arguments = “/C rtmpdump.exe -v -r rtmp://somehost.com/app-name -o – | ffmpeg.exe -loglevel quiet […]

从代码运行PsExec进程的问题

尝试使用PsExec远程运行.NET命令行工具时,我遇到了一个奇怪的问题。 从命令行运行PsExec时,它运行并完成正常。 从控制台应用程序运行它时(创建一个进程,运行带有必要参数的PsExec.exe) – 它运行正常。 从我们用于运行不同任务的内部自定义工具运行它时,它会超时或无法成功完成。 这是我正在使用的代码: Process p = new Process(); p.StartInfo.FileName = @”C:\PsExec.exe”; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; string arg = “-snapshot -display C:\*.msi -s”; p.StartInfo.Arguments = @”\\10.161.203.106 -u user -p pwd -cf C:\FVT.exe ” + arg; Logger.Info(this, “Starting process”); p.Start(); var ended = p.WaitForExit(60 * 1000); if (!ended) […]

使用C#和WinForms在他们自己的进程中的选项卡

可能重复 Windows Forms应用程序,例如Google Chrome,具有多个进程 Chrome / IE8多进程设计,是否可以在.NET中实现? 适用于Google Chrome等多进程C#应用的示例 IE8和谷歌浏览器浏览器都为每个打开的选项卡分别设置了进程 。 例如,您启动IE8并在自己的选项卡中打开Yahoo和Google,最终您的系统上运行了3个进程: IE8本身进程[主进程] Google标签流程 Yahoo标签流程 我正在玩C#/ WinForms中类似的东西。 举一个简单的例子:我有一个显示Form的主进程,我在子进程中有一个Button。 我们如何将Button从其他进程渲染到我的表单上?

获取在C#中创建的进程的pid

让我们说我正在尝试使用以下代码创建一个新进程: System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); p.StartInfo.FileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + “\\AwesomeFile.exe”; p.StartInfo.Arguments = “parameter1 parameter2”; p.StartInfo.CreateNoWindow = true; p.Start(); 在下一行中,我将尝试使用以下行获取该进程的pid: MessageBox.Show(p.Id); 这一行给了我“没有进程与此对象相关联”。 错误。 有没有想过为什么会出现这种错误?

从流开始流程

我有一个包含PDF文件的内存流。 是否可以在不将其保存到硬盘的情况下查看PDF? Process.Start()只接受路径而不是流。 谢谢

从C#中的CreateProcessAsUser捕获标准输出

我目前正在使用pinvoke CreateProcessAsUser api在asp.net网站内启动进程。 这非常适合模拟已登录的AD用户。 然而,不知何故,控制台输出的结果字符串始终为空。 我找不到出了什么问题。 没有崩溃或任何东西只是没有输出。 public static class Process { static readonly IntPtr INVALID_HANDLE_VALUE = (IntPtr)(-1); static readonly HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero); const int STD_INPUT_HANDLE = -10; public const UInt32 Infinite = 0xffffffff; const int STARTF_USESTDHANDLES = 0x100; [DllImport(“kernel32.dll”, SetLastError = true)] static extern bool SetHandleInformation(IntPtr hObject, HANDLE_FLAGS dwMask, HANDLE_FLAGS dwFlags); […]