c# - 如果应用程序是从 cmd 执行的,则写入命令行

标签 c# console cmd

我搜索了网络和 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/

相关文章:

c# - 我可以使用三元运算符来设置泛型方法参数吗?

c# - 命名约定和命名空间

c# - xml 错误 : Object reference not set to an instance of an object after SelectSingleNode

c# - 我应该如何在 Windows 上创建自定义图形控制台/终端?

windows - 如何以适合在文件/文件夹名称中使用的格式在 Windows 命令行上获取当前日期/时间?

c# - 如何让子类实现接口(interface)?

C++:在控制台应用程序中禁用滚动……?

console - ConEmu - 使用当前目录打开资源管理器

windows - 如何使用命令提示符 (cmd) 在 Windows 中列出文件。我试过在 Linux 中使用 ' ls ' 但它显示错误?

batch-file - 如何在批处理文件中使用 "FOR/F"从字符串中获取最后 n 个标记