无法在UWP Windows应用程序打包解决方案中打开AppServiceConnection

时间:2019-03-07 15:11:21

标签: uwp

我有一个UWP应用程序,该应用程序包含2个主要部分,一个具有UI的UWP项目和一个用于提供系统任务栏功能的WinForms项目。我正在使用Windows应用程序打包项目将它们结合在一起,例如本示例:https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-extend#show-a-modern-xaml-ui

启动应用程序时,WinForm应用程序将首先启动并驻留在系统托盘中。选择菜单选项之一后,UWP应用程序将启动,并使用示例中的协议方法(即Windows.System.Launcher.LaunchUriAsync("myapp://action?key=value");导航到相应的页面。一切正常。

我遇到的问题是我希望能够从UWP应用程序与WinForms应用程序进行通信(在某些情况下也可能是另一种方式)。我正在尝试使用App Service扩展来实现这一目标。我一直在关注以下示例:https://stefanwick.com/2017/06/24/uwp-app-with-systray-extension/。但是我无法使它正常工作。我不太确定fulltrust和应用程序服务声明应该在哪个项目中。

如果像示例中那样将它们放在UWP项目中,则始终会出现AppServiceUnavailable错误(名称绝对正确-我不知道此状态的文档指的是什么版本,但我看不到如何这可能是不正确的)。无论UWP应用程序当时是否打开,都会发生这种情况。以前,我已经使用过这种方法,但是只有在不涉及Windows应用程序打包项目并且UWP应用程序首先启动且我不想要的情况下才可以使用。

如果将声明放在Windows应用程序打包项目中(将应用​​程序服务可执行文件和入口点设置为UWP项目App类),则会收到一个AppUnavailable错误,我猜这意味着它在更早的时候失败了。

有人知道我如何使它工作吗?如果由于某种原因无法实现,那么任何人都可以向我指出实现此想法的正确方向(一个UWP应用,该应用在启动时不会启动任何窗口,并且位于系统托盘中,并且在所需的任何组件之间都具有双向消息传递功能。)

编辑:目标版本:17763,最低版本:16299,Windows版本:17763

EDIT2:我创建了一个小型测试解决方案,希望可以显示我正在尝试做的更好的事情:https://github.com/csuzw/AppServiceTest

1 个答案:

答案 0 :(得分:1)

好的。我检查了您的演示。与Stefan Wick协商后,这个问题就可以解决了。

您需要对WAP项目的Package.appxmanifest文件进行以下更改。否则,VS将在Winforms应用程序上声明AppService,这将无法正常工作。

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
  <uap:VisualElements DisplayName="AppServiceTest" Description="AppServiceTest" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png">
    <uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png">
    </uap:DefaultTile>
  </uap:VisualElements>
</Application>
<Application Id="App2" Executable="AppServiceTest.UI.exe" EntryPoint="AppServiceTest.UI.App">
  <uap:VisualElements AppListEntry="none" DisplayName="WapProjTemplate1" Description="WapProjTemplate1" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png">
    <uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" />
  </uap:VisualElements>
  <Extensions>
    <uap:Extension Category="windows.appService">
      <uap:AppService Name="MyAppServiceName"  />
    </uap:Extension>
    <desktop:Extension Category="windows.fullTrustProcess" Executable="AppServiceTest.Systray\AppServiceTest.Systray.exe"/>
  </Extensions>
</Application>