相关疑难解决方法(0)

如何在隐藏控制台的情况下运行C#控制台应用程序

有没有办法在执行控制台应用程序时隐藏控制台窗口?

我目前正在使用Windows窗体应用程序来启动控制台进程,但我不希望在任务运行时显示控制台窗口.

c# console-application

135
推荐指数
6
解决办法
16万
查看次数

如何将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万
查看次数

在Windows上运行任意子进程并仍然干净地终止?

我有一个应用程序A,我希望能够在配置文件中调用用户指定的任意其他进程.

批处理脚本B是用户希望由A调用的一个这样的过程.B设置一些环境变量,显示一些消息并调用编译器C来完成一些工作.

Windows是否为任意进程提供了一种标准的方式来彻底终止?假设A在控制台中运行并接收CTRL + C. 它可以传递给B和C吗?假设A在窗口中运行并且用户试图关闭窗口,它可以取消B和C吗?

TerminateProcess是一个选项,但不是一个很好的选项.如果A在B上使用TerminateProcess,则C继续运行.如果C长时间运行,这可能会导致令人讨厌的问题,因为我们可能会启动另一个C实例来操作相同的文件,而C的第一个实例仍在秘密工作.此外,TerminateProcess不会导致干净的退出.

GenerateConsoleCtrlEvent听起来不错,并且可以在控制台中运行所有内容时工作,但文档说您只能将CTRL + C发送到您自己的控制台,因此如果A在窗口中运行则无济于事.

在Windows上是否有任何等效的SIGINT?我很想找到像这样的文章:http://www.cons.org/cracauer/sigint.html for Windows.

windows copy-paste process long-running-processes

14
推荐指数
2
解决办法
2271
查看次数