我正在尝试将我的 UWP 应用程序与 Desktop Bridge 打包,包括我的 Win32 服务。我的服务是一个低级驱动程序,需要管理员权限才能运行,并有一个本地主机 TCP 套接字与之交互。服务必须在用户打开应用程序后立即启动,或者注册到 sc.exe 以在后台运行。
我发现我可以通过使用这段代码来实现这一点:
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.Verb = "runas";
process.Start();
接下来要做的就是确定exePath。我没有找到任何关于我的可执行文件应该位于何处的明确解释。如果我通过 .exe 安装程序部署应用程序,这不会成为问题,但我想使用 .msix 打包格式。
我的打包项目中提到了我的 win32 驱动程序,但当我将 .msixbundle 安装到我的计算机时,我没有看到 exe 被部署到任何地方。我怎样才能找到这个exe?
如果您想以管理员权限从应用程序运行 exe,使用桌面桥是正确的,但还需要做一些工作。 UWP 无法直接使用管理员权限启动 .exe,因此需要另一个应用程序来执行此操作。像这样的东西:
UWP 应用程序(启动并提供参数)-> 桌面应用程序(使用管理员权限启动)-> 驱动程序
您将需要使用 WinRT API FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync() 启动桌面应用程序,然后使用 Process 以管理员权限启动驱动程序。此外,您还需要修改项目文件的清单文件以添加 allowElevation 功能。步骤应如下所示:
Packaging Project
的清单文件以添加 allowElevation 功能。LaunchFullTrustProcessForCurrentAppAsync
以启动桌面应用程序。您可以在此处找到更多详细信息和示例:Stefan Wick-应用程序提升示例 – 第 3 部分