在Winrt / C ++中使用AppService

时间:2018-10-16 13:27:05

标签: c++ uwp c++-winrt

在C ++ / Cx中的github示例之后,我试图在winrt / c ++中使用AppService。我总是得到“ AppUnavailable”结果。我已经确认我连接到正确的服务名称并具有正确的家庭包裹名称。

我的appxmanifest:

  <Extensions>
    <uap:Extension Category="windows.appService" EntryPoint="BlankApp5.Inventory">
      <uap3:AppService Name="com.microsoft.inventory" uap4:SupportsMultipleInstances="true"/>
    </uap:Extension>
  </Extensions>

我的提供程序头文件(在Mainpage.h中):

namespace winrt::BlankApp5::implementation
{
class Inventory : public InventoryT<Inventory> {
public:
    virtual void Run(IBackgroundTaskInstance taskInstance);

private:
    BackgroundTaskDeferral mDef;
    AppServiceConnection appServiceConnection;
};

我的MainPage.idl文件:

[default_interface]
runtimeclass Inventory : Windows.ApplicationModel.Background.IBackgroundTask
{
    void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance);
}

在生成IDL期间,我收到以下警告:

[msg]A member name has been qualified with an interface name because name collisions occurred across interface members on a runtime class. [context]"Run" has been renamed as "BlankApp5.IInventory.Run" on runtime class "BlankApp5.Inventory"

我有点担心链接器剥离了Inventory :: Run,因为它不在serviceprovider内部使用,但是我不知道为什么它不起作用。提供者和客户端处于两种不同的解决方案中,彼此之间没有引用,但是我认为这不是必需的。服务提供商已经部署,但尚未启动。启动没有区别。

1 个答案:

答案 0 :(得分:0)

您无需在idl文件中声明void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance);,因为您实现了IBackgroundTask且隐式声明了void Run