2017-06-01 121 views
2

我在玩微軟的UWP AppServiceBridgeSamplehere)。它運行良好,但我想擺脫BackgroundProcess應用程序的控制檯窗口。原因是我的BackgroundProcess啓動另一個Win32桌面應用程序,並且只能作爲中介,所以我不想用控制檯窗口打擾用戶。 (是的,它可以最小化,但我寧願不顯示它)。沒有控制檯窗口的AppServiceBridge

我試圖隱藏它使用API​​提到的here,但沒有運氣,控制檯窗口仍然可見。也沒有將項目的輸出類型從Console Application切換到Windows Application

所以我嘗試過的另一件事是創建其他BackgroundProcess項目作爲Windows應用程序。它運行良好,直到我撥打AppServiceConnection.OpenAsync(),這導致BackgroundProcess應用程序退出(無一例外),因此與UWA的連接不可用。

static async void ThreadProc() 
{ 
    try 
    { 
    AppServiceConnection connection = new AppServiceConnection(); 
    connection.AppServiceName = "CommunicationService"; 
    connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName; 
    connection.RequestReceived += Connection_RequestReceived; 
    AppServiceConnectionStatus status = await connection.OpenAsync(); 
    //status check etc. ... 
    } 
    catch(Exception ex) 
    { 
    MessageBox.Show(ex.ToString()); 
    } 
} 

看來只能從控制檯應用程序打開AppService連接。

因此,這裏有我的兩個問題:

  1. 是它,任何機會,甚至有可能隱藏的後臺進程控制檯窗口?
  2. 我可以使用後臺進程作爲Windows應用程序,在調用OpenAsync期間沒有AppServiceConnection失敗嗎?

回答

2

回覆1:進入項目設置並將輸出類型從控制檯更改爲Windows應用程序。還要確保Main()函數在您完成後臺進程之前不會退出。這裏是一個更好的樣本,顯示這跟Windows應用程序: https://stefanwick.com/2017/05/26/uwp-calling-office-interop-apis/

enter image description here

回覆2:AppServiceConnection作品從一個窗口應用程序相同的方式爲好。確保將正確的引用添加到可以構建的Windows.winmd中。如果您遇到問題,請發佈具體問題並提供您遇到的問題的詳細信息。

+0

我已經嘗試了兩種方法,正如我的問題所述。 不幸的是,當構建爲Window應用程序時,它運行正常,直到我調用導致BackgroundProcess應用程序退出(無一例外)的AppServiceConnection.OpenAsync()。 我確定所有引用都已到位,因爲當我將該項目切換到控制檯應用程序時,它按預期工作。 – kibitzerCZ

+2

在完成使用過程之前,您還需要確保不要退出Main()。我已經相應地更新了我的答案,併爲您指出了一個更好的示例項目。 –

+0

哦,我錯過了連接運行在一個獨立的線程 - 現在很清楚,主線程在等待期間退出!非常感謝您的協助和您的樣品,這給了我所需要的一切。 – kibitzerCZ