我搜索了网络和 Stackoverflow,我没有找到任何东西。 如果这个问题已经存在,我很抱歉。
如果我的 C# 应用程序是通过 cmd 调用的,例如:
C:\System32\MyConsoleApplication -parmOne -paramTwo ...
有没有办法写入cmd(例如提供进度信息?)
编辑:因为我使用控制台应用程序,解决方案是 Console.WriteLine
它对我不起作用,因为我的应用程序需要管理员权限(通过 list 文件)并使用普通用户权限调用。在这种情况下,UAC 请求权限并使用应用程序打开一个新的 Cmd。
最佳答案
更好的解决方案:http://www.nerdyhearn.com/blog/157/
这是网站的代码:
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;
[STAThread]
static void Main(string[] args)
{
// Enable visual elements just like always
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Attach to the parent process via AttachConsole SDK call
AttachConsole(ATTACH_PARENT_PROCESS); // <-- important point here
Console.WriteLine("This is from the main program");
Application.Run(new Form1());
}
您可以在您需要的特殊条件下随意使用 AttachConsole
调用。这更好更灵活,不需要您更改应用程序 list 。如果它是一个 win32 应用程序,将对您的应用程序有好处。如果它是从 cmd 启动的,那么输出将显示为预期。
我的观点:这只是一些在 Unix 世界中如此纯粹和自然的概念的一些无用的微软复杂化。如果您的应用程序是从可视启动器(图标、nautilus..)启动的,那么输出将丢失。您可以从控制台启动您的应用程序并在控制台中获取它。如果需要,您可以重定向输出,这一切都在逻辑上错综复杂且功能强大。对于微软……它臃肿而且妨碍了每个人。
关于c# - 如果应用程序是从 cmd 执行的,则写入命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18396650/