2016-08-04 581 views
21

我試圖爲自己自動執行一些任務,並且我寫了幾個.NET Core 1.0控制檯應用程序。其中之一是BrowserRouter - 一個簡單的應用程序,它基於url模式,決定當我點擊http(s)鏈接時打開哪個瀏覽器/瀏覽器配置文件。是否可以靜默運行.NET Core控制檯應用程序(隱藏控制檯窗口)?

這工作正常,但總是有出現,並立即消失控制檯窗口。

有沒有辦法來默默運行.NET核心控制檯應用程序(隱藏控制檯窗口)?

我完全知道.NET Framework有可能將輸出類型更改爲Windows應用程序,但對於.NET Core,該功能尚不可用(尚未解決)。

+5

有關使用Windows服務是什麼? – VahidNaderi

+3

[如何在隱藏控制檯的情況下運行C#控制檯應用程序]可能的重複(http://stackoverflow.com/questions/836427/how-to-run-ac-sharp-console-application-with-the-console-隱藏) –

+3

@VahidNaderi .Net Core是X-Plat--不確定Windows服務如何在Linux/MAC上運行。 – DaveShaw

回答

0

這可能不是最好的或最乾淨的解決方案,而是我之前使用過的一個技巧。如果啓動一個新的Windows窗體應用程序,然後從Program.cs文件中刪除對錶單的引用,它將在後臺運行應用程序,任務欄或桌面上不顯示任何內容。它確實出現在任務管理器中。

我用這個技巧編寫了一個應用程序來玩一個朋友的惡作劇。它會在後臺運行並以隨機間隔執行系統嗶聲。再次,可能不是最優雅的解決方案,而是一種方法。

+0

如果它是一個Winform應用程序,您可以執行'this.Hide()'並且不顯示該窗體。 OP想要隱藏控制檯。 –

+2

我不認爲WinForms在dotnet核心上是受支持的但是 – OzieGamma

12

目前,這不是直接可能的開箱即用,因爲Windows exe文件包含一個標誌,指示,如果它是一個「控制檯」或「GUI」的應用程序,窗口甚至開始申請前評估。然而,這個標誌可以使用editbin.exe(VS'C++構建工具afaik附帶)來更改。

大廈這一點,你可以創建一個自包含.NET核心應用(拔下project.json"type": "platform"並增加了運行時的部分),這樣你的項目輸出包括實際.exe文件,並添加一個生成後的腳本調用editbin.exe /subsystem:windows yourapp.exe

+0

你是天才,它工作正常! – docesam

+0

這裏有更多關於editbin.exe的SUBSYSTEM選項的文檔:https://docs.microsoft.com/en-us/cpp/build/reference/subsystem 我將editbin.exe和link.exe複製到一個文件夾在我的解決方案。在VS2017中,我在項目的構建後事件中使用了以下內容: '「$(SolutionDir)Build \ bin \ editbin.exe」-SUBSYSTEM:WINDOWS「$(SolutionDir)Project1 \ bin \ Debug \ netcoreapp1.1 \ win10-x64 \ Project1.exe「' 我不知道是否有其他人有這個,但我不能得到許多宏的工作(可能是因爲我不得不調整csproj讓它建立爲一個exe)。 –

1

如果你和我一樣,想內部網絡上部署aspnet core mvc應用

  • 不想IISWebHostService
  • 不在乎Linux/Mac
  • 並希望隱藏來自用戶的Kestrel控制檯

,那麼你應該閱讀微軟的官方文檔如何host an aspnet core in a Windows Service

相關問題