如何在UWP应用程序中启动Win32服务?

问题描述 投票:0回答:1

我正在尝试将我的 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?

c# windows winapi uwp desktop-bridge
1个回答
2
投票

如果您想以管理员权限从应用程序运行 exe,使用桌面桥是正确的,但还需要做一些工作。 UWP 无法直接使用管理员权限启动 .exe,因此需要另一个应用程序来执行此操作。像这样的东西:

UWP 应用程序(启动并提供参数)-> 桌面应用程序(使用管理员权限启动)-> 驱动程序

您将需要使用 WinRT API FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync() 启动桌面应用程序,然后使用 Process 以管理员权限启动驱动程序。此外,您还需要修改项目文件的清单文件以添加 allowElevation 功能。步骤应如下所示:

  1. 创建 UWP 应用程序
  2. 创建桌面应用程序,例如控制台应用程序
  3. 将驱动程序的.exe添加到桌面应用程序中
  4. 创建 Windows 应用程序打包项目,将 UWP 应用程序和桌面应用程序打包在一起。
  5. 修改
    Packaging Project
    的清单文件以添加 allowElevation 功能。
  6. 从 UWP 应用程序调用
    LaunchFullTrustProcessForCurrentAppAsync
    以启动桌面应用程序。
  7. 桌面应用程序将使用 Process API 启动具有管理员权限的驱动程序 .exe。

您可以在此处找到更多详细信息和示例:Stefan Wick-应用程序提升示例 – 第 3 部分

© www.soinside.com 2019 - 2024. All rights reserved.