相关疑难解决方法(0)

如何将ctrl + c发送到c#中的进程?

我正在为命令行可执行文件编写一个包装类.这个exe接受来自stdin的输入,直到我在命令提示符shell中命中ctrl + c,在这种情况下,它根据输入到stdout打印输出.我想模拟ctrl + c按c#代码,将kill命令发送到.Net进程对象.我试过调用Process.kill(),但这似乎没有给我进程的StandardOutput StreamReader.可能有什么我做得不对劲?这是我正在尝试使用的代码:

ProcessStartInfo info = new ProcessStartInfo(exe, args);
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);

p.StandardInput.AutoFlush = true;
p.StandardInput.WriteLine(scriptcode);

p.Kill();

string error = p.StandardError.ReadToEnd();
if (!String.IsNullOrEmpty(error)) 
{
    throw new Exception(error);
}
string output = p.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

但是,当我手动运行exe时,输出总是为空,即使我从stdout获取数据.编辑:这是c#2.0顺便说一句

c# command-line process .net-2.0

28
推荐指数
4
解决办法
5万
查看次数

C#:发送ctrl + c到用Process.Start()启动的控制台程序?

可能重复:
如何将ctrl + c发送到c#中的进程?

我无法弄清楚如何模拟发送Ctrl+ C外部程序.当我通过CMD手动运行该程序,当我按下Ctrl+ c将中止,并问我是否要保存它已完全关闭之前.我试图通过C#来模拟它,但它似乎不起作用.

这就是我现在正在做的事情:

// Create new process object
process = new Process();

// Setup event handlers
process.EnableRaisingEvents = true;
process.OutputDataReceived += OutputDataReceivedEvent;
process.ErrorDataReceived += ErrorDataReceivedEvent;
process.Exited += ProgramExitedEvent;

// Setup start info
ProcessStartInfo psi = new ProcessStartInfo
{
    FileName = ExePath,
    UseShellExecute = false, // Must be false to redirect IO
    RedirectStandardOutput = false,
    RedirectStandardError = false,
    RedirectStandardInput = true,
    Arguments = arguments
};

process.StartInfo = psi;

// Start …
Run Code Online (Sandbox Code Playgroud)

c# escaping copy-paste

5
推荐指数
0
解决办法
1万
查看次数

标签 统计

c# ×2

.net-2.0 ×1

command-line ×1

copy-paste ×1

escaping ×1

process ×1