【发布时间】:2018-06-13 05:18:05
【问题描述】:
我需要托管 WCF 服务以接收来自服务的响应。由于 UWP 应用没有 wcf 托管功能,因此我选择了这个系统托盘组件来托管我的服务,以便获得响应并通过应用服务与 UWP 应用通信并显示 toast。
但系统托盘组件在启动后立即终止。为了明确我的系统托盘与 uwp 的集成,我已经对其进行了测试并且正在运行,然后使用 WCF 托管对其进行了扩展。
后来我尝试添加显示异常消息框的调试,发现 WCF 服务打开调用抛出异常。
"System.ServiceModel.AddressAccessDeniedException: HTTP 无法注册 URL http::1234"
后来了解到,系统托盘应用程序需要管理员权限才能注册作为服务的一部分托管的 URL,并且 UWP 应用程序通过完全信任 API 启动系统托盘,而不是通过管理员提升来实现。
所以为了解决这个问题,我采用了 2 种方法并尝试如下所述:
1) 所以我尝试使用 netsh 手动添加 URL reg 并且相同的程序可以工作。只是为了进行调整,我尝试使用管理员权限在系统托盘应用程序本身中运行相同的 netsh 命令,并且只启动了托盘应用程序,我看不到任何异常,并且可以看到我的服务托管在浏览器中。
现在我在通过 UWP 应用程序启动系统托盘应用程序时无法提供管理员权限。
但是如果托盘应用程序是由 UWP 启动的,即使我包含了 netsh 命令,它仍然会显示相同的异常。 (可能是父进程(以管理员身份运行是 N/A UWP 应用程序)没有管理员权限,所以即使我在系统托盘应用程序中的 netsh cmd 也无法正常工作???)
或者有什么方法可以提供参数或任何其他 API 以通过 UWP 应用程序中的完全信任 api 与管理员一起运行托盘应用程序???
2) 尝试将应用清单文件添加到托盘应用并修改如下
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但这也显示了一个错误框,说这需要提升并退出。
请帮助。
【问题讨论】:
标签: wcf uwp system-tray desktop-bridge