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