Dot-Net-Core

確定 .Net 核心控制台應用程序是否在使用者互動模式下執行

  • November 10, 2021

是否可以確定 .Net 核心控制台應用程序是否在使用者互動模式下執行?

在以前的 .Net 版本中,可以測試Environment.UserInteractive使用者是否可以訪問應用程序。這似乎在 .Net 核心中不存在。

.NET Core 比經典 .NET Framework 面臨更多的問題是如何定義“使用者互動”。即使在“經典”.NET 上,Environment.UserInteractive感覺也很笨拙,因為它依賴於系統 API 呼叫來查詢使用者對象標誌並測試描述為 .NET 的標誌Window station has visible display surfaces。目前尚不清楚這在您用來執行命令的無 GUI Windows Nano 伺服器上的語義究竟意味著什麼。

我的建議是確定您要測試的確切案例。例如,您可以測試附加的輸入和輸出流是否使用Console.IsOutputRedirectedand重定向Console. IsInputRedirected。在非 Windows 系統上,isatty()可以進行呼叫,但目前不能作為 .NET API 使用(您必須編寫 PInvoke 程式碼)。如果要確定是否作為 Windows 服務執行,TopShelf 會檢查該程序是否已由服務主機啟動。另一種方法是為特定案例添加額外的參數 - 例如,添加並檢查--noninteractive何時要從腳本執行工具。

引用自:https://stackoverflow.com/questions/45393001