如果从cmd执行应用程序,则写入命令行

Bud*_*rot 2 c# console cmd

我搜索了网络和Stackoverflow,我没有找到任何东西.如果这个问题已经存在,我很抱歉.

如果通过cmd调用我的C#应用​​程序,例如:

C:\ System32\MyConsoleApplication -parmOne -paramTwo ...

有没有办法写入cmd(例如给出进度信息?)

编辑:因为我使用Console Console.WriteLine应用程序解决方案ist 它不适合我,因为我的应用程序需要管理员(通过Manifestfile)并使用普通用户权限调用.在这种情况下,UAC要求权限并使用该应用程序打开一个新的Cmd.

v.o*_*dou 9

更好的解决方案: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());
}
Run Code Online (Sandbox Code Playgroud)

您可以AttachConsole在您需要的特殊条件下随意使用电话.这样更好,更灵活,不需要您更改应用程序清单.如果它是一个win32应用程序,对你的应用程序有好处.如果从cmd启动,则输出将显示为已排除.

我的观点:这只是一些在Unix世界中如此纯粹和自然的概念的一些无用的微软复杂化.如果您的应用程序是从可视启动器(icon,nautilus ..)启动的,那么输出就会丢失.您可以从控制台启动应用程序,然后将其置于控制台中.你可以根据需要重定向输出,它可以逻辑地重叠并且功能强大.随着微软......它臃肿并阻碍了每个人.

  • 伟大的解决方案,谢谢。但是对于像我这样的没有意识到DLLImport位的人来说,它属于Program类声明。否则,您会收到很多无用的编译错误! (2认同)