首页 > 解决方案 > 从 UWP 应用启动桌面扩展代码的问题

问题描述

我需要托管 WCF 服务以接收来自服务的响应。由于 UWP 应用程序没有 wcf 托管功能,因此我选择了这个系统托盘组件来托管我的服务,以便我获得响应并通过应用程序服务与 UWP 应用程序通信并显示 toast。

但是系统托盘组件在启动后立即终止。为了清楚我的系统托盘与 uwp 的集成,我已经对其进行了测试并且正在工作,然后使用 WCF 托管对其进行了扩展。

后来我尝试添加显示异常消息框的调试,发现 WCF 服务打开调用抛出异常。

System.ServiceModel.AddressAccessDeniedException: HTTP 无法注册 URL http::1234

后来了解到,系统托盘应用程序需要管理员权限才能注册作为服务的一部分托管的 URL,并且 UWP 应用程序通过完全信任 API 启动系统托盘,而不是通过管理员提升来实现。

所以为了解决这个问题,我有两种方法并尝试如下所述:

1)所以我尝试使用 netsh 手动添加 URL reg 并且相同的程序可以工作。只是为了调整,我尝试在带有管理员权限的系统托盘应用程序本身中运行相同的 netsh 命令,并且只启动了托盘应用程序,我看不到任何异常,并且可以看到我的服务托管,在浏览器中签入。

现在,在通过 UWP 应用程序启动系统托盘应用程序时,我不得不提供管理员权限。

但是,如果托盘应用程序是由 UWP 启动的,即使我包含了 netsh 命令,它仍然会显示相同的异常。(可能是父进程(以管理员身份运行是 N/A UWP 应用程序)没有管理员权限,所以即使我在系统托盘应用程序中的 netsh cmd 也无法正常工作???)

或者是否有任何方法提供参数或任何其他 API 以通过 UWP 应用程序的完全信任 api 与管理员一起运行托盘应用程序???

2)尝试将应用清单文件添加到托盘应用程序并修改如下

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

但这也显示了一个错误框,说这需要提升并退出。

请帮助。

标签: wcfuwpsystem-traydesktop-bridge

解决方案


桌面桥进程当前不支持请求提升的权限。因此,您在此处看到的内容目前是预期的。好消息是我们在 RS5(2018 年秋季更新)中添加了一项名为“allowElevation”的新功能,这将启用需要海拔高度的场景。

您应该能够使用最新的 Windows Insider Preview 版本和相应的 SDK 开始测试新功能。

2018 年 10 月 1 日更新:我发布了此新功能的示例 https://stefanwick.com/2018/10/01/app-elevation-samples-part-1/


推荐阅读