在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内部使用,但是我不知道为什么它不起作用。提供者和客户端处于两种不同的解决方案中,彼此之间没有引用,但是我认为这不是必需的。服务提供商已经部署,但尚未启动。启动没有区别。
答案 0 :(得分:0)
您无需在idl文件中声明void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance);
,因为您实现了IBackgroundTask
且隐式声明了void Run
。