Tag: 进程

读取其他进程控制台输出

我在“wave”中返回控制台输出时遇到问题。 例如,控制台每秒输出一些东西,例如事件每分钟触发60次(同时所有事件)。 我的代码: Process Proc = new Process(); Proc.StartInfo.FileName = SSMS.BinaryDir + “HldsUpdateTool.exe”; Proc.StartInfo.Arguments = “-command update -game tf -dir ” + SSMS.RootDir + Key; Proc.StartInfo.UseShellExecute = false; Proc.StartInfo.RedirectStandardOutput = true; Proc.StartInfo.RedirectStandardError = true; Proc.EnableRaisingEvents = true; Proc.StartInfo.CreateNoWindow = false; Proc.ErrorDataReceived += new DataReceivedEventHandler(Proc_ErrorDataReceived); Proc.OutputDataReceived += new DataReceivedEventHandler(Proc_OutputDataReceived); Proc.Exited += new EventHandler(Proc_Exited); Proc.Start(); Proc.BeginErrorReadLine(); Proc.BeginOutputReadLine(); […]

等到多个命令行进程完成?

我需要执行许多命令行脚本。 它们目前存储在List 。 我想同时运行它们,并且只有在所有这些步骤完成后才继续执行下一步。 我已经尝试了下面显示的方法,但发现它缺乏,因为最后一个命令不一定最后结束 。 事实上,我发现最后一个命令甚至可以是第一个完成的命令。 所以,我相信我需要像WaitForExit()这样的东西,但是在所有正在执行的进程完成之前它不会返回。 for (int i = 0; i < commands.Count; i++) { string strCmdText = commands[i]; var process = System.Diagnostics.Process.Start("CMD.exe", strCmdText); if (i == (commands.Count – 1)) { process.WaitForExit(); } } //next course of action once all the above is done

使用process.ErrorDataReceived c#获取进程错误输出

我已经构建了一段时间使用的Form App,现在我想要捕获我的进程的StandardError以及它的standartOutput 我已经在SO和MSDN中查看了答案,但却无法正确理解 我的代码: public void RunProcess(string FileName, string Arguments,, bool IsPrintOutput = true) { process = new Process(); process.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceivedEvent); if (IsPrintOutput) process.OutputDataReceived += new DataReceivedEventHandler(OnDataReceivedEvent); process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = FileName; process.StartInfo.Arguments = Arguments; if (EventWhenExit) { process.EnableRaisingEvents = true; process.Exited += […]

使用块使用块

可能重复: 如果我不在我的C#控制台应用程序中关闭System.Diagnostics.Process会发生什么? 由于System.Diagnostics.Processinheritance自实现IDisposable Component ,我是否应该始终using块创建Process ? 例如,这……: using (var process = new Process()) { process.StartInfo.FileName = “some process.exe”; process.Start(); process.WaitForExit(); } ……而不是这个: var process = new Process { StartInfo = { FileName = “some process.exe” } }; process.Start(); process.WaitForExit(); 我问,因为我很少看到Process出现在using块中; 例如, Process的MSDN页面不使用它。 使用对象初始化程序也很有帮助。 如果我应该使用它,那么我应该去“改造”它到我现有的代码库吗? 如果没有这样做会有什么后果? (假设在每种情况下都正确调用WaitForExit() 。)

如何从c#关闭另一个进程

我需要从C#应用程序中关闭另一个进程(Windows Media Encoder),到目前为止我可以使用: Process.GetProcessesByName(“wmenc.exe”)[0].CloseMainWindow(); 但是如果Media Encoder Application是Streaming或Recording,它会在退出时显示一个Dialog: “你确定要停止编码吗?” 那么有没有办法回答或点击代码中的是按钮? [编辑]许多用户正在回答Process.kill() ,但这不是一个选项,因为Process.Kill(); 将立即终止Windows Media Encoder , Windows Media Encoder将不会完成正在写入的文件,这迫使我重新索引video文件。所以我不能使用Process.Kill();

C#启动一个新的MailTo进程和HTML URL编码

我为Process类创建了一个新的MailTo扩展方法,它只是用一个包含所需mailto参数的新ProcessStartinfo填充Process。 我已经创建了一个名为FormatMailToArgument的方法(最后在右边),它将控制字符转换为它们的Url编码等价物并测试了它并且它可以工作但是有更好的方法吗? /// /// extension methods. /// public static class Processes { #region MailTo /// /// Populates the process with mailto . You may leave any /// argument as null if not needed. /// /// The process. /// The mail message. public static void MailTo(this Process process, MailMessage mailMessage) { MailTo( process, mailMessage.To.ToDelimetedString(), mailMessage.CC.ToDelimetedString(), mailMessage.Bcc.ToDelimetedString(), […]

异步读取过程输出时延迟

我使用.NET和C#来启动进程并异步读取它的输出。 我的问题是在我的程序读取输出之前似乎有一段延迟。 如果我在命令行上运行可执行文件,它会在开始运行时立即输出。 但是当我使用我的代码运行它时,在Process退出之前不会调用ReadOutput事件处理程序。 我想用它来提供进程输出的实时视图,所以我不想等待(几分钟)直到进程退出。 这是一些相关的代码: MyProcess = new Process(); MyProcess.StartInfo.FileName = command; MyProcess.StartInfo.Arguments = args; MyProcess.StartInfo.UseShellExecute = false; MyProcess.StartInfo.RedirectStandardOutput = true; MyProcess.StartInfo.RedirectStandardError = true; MyProcess.StartInfo.RedirectStandardInput = true; MyProcess.OutputDataReceived += new DataReceivedEventHandler(ReadOutput); MyProcess.ErrorDataReceived += new DataReceivedEventHandler(ReadOutput); if (!MyProcess.Start()) { throw new Exception(“Process could not be started”); } try { MyProcess.BeginOutputReadLine(); MyProcess.BeginErrorReadLine(); } catch (Exception ex) […]

MSBuild BuildInParallel,无法运行的自定义任务生成过程

我正在使用MSBuild任务的BuildInParallel属性来并行运行构建项目。 根项目正在构建四个子项目。 子项目正在使用自定义MSBuild任务,该任务使用System.Diagnostics.Process启动新进程。 由于某些原因,当UseShellExecute为false时,生成的进程无法正常运行。 我不知道为什么会这样,我无法弄清楚错误是什么 – 所有发生的事情都是Process.ExitCode是1,没有exception.. 这是自定义MSBuild任务: using System; using Microsoft.Build.Utilities; using System.Diagnostics; public class MSBuildProcessTask : Task { public string Executable { get; set; } public string Arguments { get; set; } public override bool Execute() { using (var p = new Process()) { try { p.StartInfo = new ProcessStartInfo(Executable, Arguments) { UseShellExecute […]

C#ProcessStartInfo:如何指定filepath?

我可以看到在ProcessStartInfo中您可以指定文件名,但是如何指定文件路径? 谢谢。

使用带偏移的基本指针读取进程内存

我已经在网上搜索了几个小时,并且不能为我的生活理解为什么下面的代码不起作用。 为该过程提取的基地址似乎是错误的 。 如果我将结束地址直接硬编码到ReadMemory ,我会得到所需的值(所以我知道我有正确的过程和所有)。 我还没有发布MemoryHandler类,因为它正常工作 这可能与我在64位窗口上的事实有关吗? 游戏是32位(安装在“Program Files(x86)”文件夹中)。 public partial class MainForm : Form { Process myProcess = Process.GetProcessesByName(“ffxiv”).FirstOrDefault(); public MainForm() { InitializeComponent(); } private void startButton_Click(object sender, EventArgs e) { IntPtr baseAddress = myProcess.MainModule.BaseAddress; Console.WriteLine(“Base Address: ” + baseAddress.ToString(“X”)); IntPtr newAddr = IntPtr.Add(baseAddress, 0xF8BEFC); IntPtr finalAddr = IntPtr.Add(newAddr, 0x1690); int bytesRead; byte[] memoryOutput […]