Dot-Net-Core
確定 .Net 核心控制台應用程序是否在使用者互動模式下執行
是否可以確定 .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何時要從腳本執行工具。