【问题标题】:AppServiceBridge without console window没有控制台窗口的 AppServiceBridge
【发布时间】:2017-06-01 12:12:37
【问题描述】:

我正在玩微软的 UWP AppServiceBridgeSample (here)。

它运行良好,但我想摆脱BackgroundProcess 应用程序的控制台窗口。这样做的原因是我的BackgroundProcess 启动了另一个Win32 桌面应用程序并且仅作为中介工作,所以我不想用控制台窗口打扰用户。 (是的,它可以最小化,但我宁愿根本不显示)。

我曾尝试使用提到的 API here 隐藏它,但运气不好,控制台窗口仍然可见。也没有将项目的输出类型从 Console Application 切换到 Windows Application.work。

我尝试的另一件事是将其他 BackgroundProcess 项目创建为 Windows 应用程序。它运行良好,直到我调用 AppServiceConnection.OpenAsync(),这导致 BackgroundProcess 应用程序退出strong text,因此无法连接到 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 应用程序,而 AppServiceConnectionOpenAsync 调用期间不会失败?

【问题讨论】:

    标签: c# uwp desktop-bridge


    【解决方案1】:

    Re 1:进入项目设置并将输出类型从控制台更改为 Windows 应用程序。还要确保 Main() 函数在完成后台进程之前不会退出。这是一个更好的示例,它通过 Windows 应用程序显示了这一点: https://stefanwick.com/2017/05/26/uwp-calling-office-interop-apis/

    Re 2:AppServiceConnection 在窗口应用程序中的工作方式也相同。确保添加对 Windows.winmd 的正确引用以便能够构建。如果您对此有疑问,请发布一个具体问题,详细说明您遇到的问题

    【讨论】:

    • 我已经尝试了两种方式,如我的问题中所述。不幸的是,当构建为 Window 应用程序时,它运行良好,直到我调用 AppServiceConnection.OpenAsync(),这会导致 BackgroundProcess 应用程序退出(无异常)。我确信所有引用都已到位,因为当我将项目切换到控制台应用程序时,它会按预期工作。
    • 您还需要确保在完成使用该过程之前不要退出 Main()。我已经相应地更新了我的答案,并为您指出了一个更好的示例项目。
    • 哦,我错过了连接在独立线程中运行 - 现在很清楚,主线程在等待期间退出!非常感谢您的帮助和样品,这给了我所需的一切。
    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多