Tag: 过程

process.standardInput编码问题

我对process.standartInput编码的编码有问题。 我在我的Windows窗体应用程序中使用了一些进程,但输入应该是UTF-8。 Process.StandardInput.Encoding是只读的,因此我无法将其设置为UTF-8,并且它获得了Windows默认编码,这会恶化UTF-8中的原生字符。 程序中使用了2个进程,一个将输出写入文件和其他读取。 因为我可以将输出编码设置为UTF-8,这部分工作正常,但回读是我遇到问题的部分。 我将包括我使用该过程的部分。 ProcessStartInfo info = new ProcessStartInfo(“mysql”); info.RedirectStandardInput = true; info.RedirectStandardOutput = false; info.Arguments = mysqldumpstring; info.UseShellExecute = false; info.CreateNoWindow = true; Process p1 = new Process(); p1.StartInfo = info; p1.Start(); string res = file.ReadToEnd(); file.Close(); MessageBox.Show(p1.StandardInput.Encoding.EncodingName); //= where encoding should be Encoding.UTF8; p1.StandardInput.WriteLine(res); p1.Close();

如何从C#中的进程中捕获exception

我在这里有一个接受跑步者计划,看起来像这样: public Result Run(CommandParser parser) { var result = new Result(); var watch = new Stopwatch(); watch.Start(); try { _testConsole.Start(); parser.ForEachInput(input => { _testConsole.StandardInput.WriteLine(input); return _testConsole.TotalProcessorTime.TotalSeconds < parser.TimeLimit; }); if (TimeLimitExceeded(parser.TimeLimit)) { watch.Stop(); _testConsole.Kill(); ReportThatTestTimedOut(result); } else { result.Status = GetProgramOutput() == parser.Expected ? ResultStatus.Passed : ResultStatus.Failed; watch.Stop(); } } catch (Exception) { result.Status = […]

即使EnableRaisingEvents设置为true,也永远不会调用Process.Exited

我有一个可执行文件,当我手动运行时运行正常,并且它应该与预期输出一样存在。 但是当我使用下面的方法运行它时,Process.Exited事件永远不会被触发。 请注意,我记得Process.EnableRaisingEvents protected override Result Execute(RunExecutable task) { var process = new Process(); process.StartInfo.Arguments = task.Arguments; process.StartInfo.FileName = task.ExecutablePath; process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.EnableRaisingEvents = true; process.Exited += (sender, args) => { processSync.OnNext(new Result { Success = process.ExitCode == 0, Message = process.StandardOutput.ReadToEnd() }); processSync.OnCompleted(); }; process.Start(); return processSync.First();; […]

C#在Process.Kill()期间只完成了ReadProcessMemory或WriteProcessMemory请求的一部分

我一直在广泛研究这个问题,似乎无法找到答案。 我知道Only part of a ReadProcessMemory or WriteProcessMemory request was completed的Only part of a ReadProcessMemory or WriteProcessMemory request was completedexception在32位进程尝试访问64位进程时引发exception,而对于64位修改32位进程则相同。 该问题的解决方案是将平台目标更改为“任何CPU”。 我试过这个,不幸的是这并没有解决我的问题。 下一个代码块是不断抛出exception的原因。 运行此代码的程序用于在远程计算机上打开应用程序,并保留程序本身打开的所有进程的列表,这样我就不必遍历所有进程。 Process processToRemove = null; lock (_runningProcesses) { foreach (Process p in _runningProcesses) { foreach (ProcessModule module in p.Modules) { string[] strs = text.Split(‘\\’); if (module.ModuleName.Equals(strs[strs.Length – 1])) { processToRemove = p; […]

C#:在另一个进程的内存中搜索byte 数组

如何在另一个进程的内存中搜索byte []数组,然后在byte []数组所在的位置获取地址? 我想将一个字节数组写入另一个进程的内存(WriteProcessMemory())。该调用的一个参数是uint Address.Well我想通过在进程中搜索一个字节数组来获取地址。 例如,我搜索{0xEB,0x20,0x68,0x21,0x27,0x65,??,0x21,0x64,0xA1} 我们假设这个数组只放在我想写内存的进程的内存中的一个位置。 要获得该地址,我必须搜索该字节数组。 是否可以在C#中完成? 编辑: 这适用于本机应用程序,而不是.NET。 没有必要低估我的问题,有C ++的组件可以做到这一点,我只想在C#中做到这一点。 感谢您的理解!

创建跨进程EventWaitHandle

我有两个Windows应用程序,一个是Windows服务,它创建EventWaitHandle并等待它。 第二个应用程序是一个windows gui,通过调用EventWaitHandle.OpenExisting()打开它,并尝试设置事件。 但我在OpenExisting中遇到exception。 例外是“拒绝访问路径”。 windows服务代码 EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset, “MyEventName”); wh.WaitOne(); Windows GUI代码 try { EventWaitHandle wh = EventWaitHandle.OpenExisting(“MyEventName”); wh.Set(); } catch (Exception ex) { MessageBox.Show(ex.Message); } 我用两个示例控制台应用程序尝试了相同的代码,它工作正常。

用于Process可执行文件的.NET事件

是否有任何方法可以注册在特定文件名的可执行文件启动时触发的事件? 我知道,当进程退出时,通过获取进程句柄并注册已退出的事件,可以轻松获取事件。 但是,当一个尚未运行的进程启动时,如何在不轮询所有正在运行的进程的情况下,如何通知您?