0

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

我的应用清单:

  <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 会被链接器剥离,因为它没有在服务提供者内部使用,但我不知道为什么它不起作用。提供者和客户端处于两个不同的解决方案中,彼此之间没有引用,但我认为这不是必需的。服务提供者已部署,但未启动。启动没有区别。

4

1 回答 1

0

你不需要void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance);在你的 idl 文件中声明,因为你实现IBackgroundTask并且 avoid Run是隐式声明的。

于 2018-12-24T03:10:06.207 回答