[英]Write to command line if application is executed from cmd
我搜索了網絡和Stackoverflow,我沒有找到任何東西。 如果這個問題已經存在,我很抱歉。
如果通過cmd調用我的C#應用程序,例如:
C:\\ System32 \\ MyConsoleApplication -parmOne -paramTwo ...
有沒有辦法寫入cmd(例如給出進度信息?)
編輯:因為我使用Console.WriteLine
應用程序解決方案ist Console.WriteLine
它不適合我,因為我的應用程序需要管理員(通過一個Manifest文件),並使用普通用戶權限調用。 在這種情況下,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
呼叫。 這樣更好,更靈活,不需要您更改應用程序清單。 如果它是一個win32應用程序,對你的應用程序有好處。 如果從cmd啟動,則輸出將顯示為已排除。
我的觀點:這只是一些在Unix世界中如此純粹和自然的概念的一些無用的微軟復雜化。 如果您的應用程序是從可視啟動器(icon,nautilus ..)啟動的,那么輸出就會丟失。 您可以從控制台啟動應用程序,然后將其置於控制台中。 你可以根據需要重定向輸出,它可以邏輯地重疊並且功能強大。 隨着微軟......它臃腫並阻礙了每個人。
這一切都取決於exe
類型是什么 - 它是PE-header(“exe”shell)中的標志:
它不可能兩者兼而有之。 你希望它像正常的Windows exe一樣工作,然后你必須編譯它作為一個Windows exe,這意味着沒有:它不會正常寫入控制台。 嘗試從Windows exe獲取對控制台的訪問權限是棘手的,並且需要P / Invoke到操作系統。
如果它被標記為控制台exe,那么只需Console.WriteLine
就可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.