有条件地以管理员权限运行一段代码的正确方法是什么?

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

我正在开发一个 C#/.NET/AvaloniaUI 应用程序,通过 libusb 与 USB 设备进行通信。这需要 WinUSB 驱动程序与 Windows 上的设备配对。在我的用例中,大多数用户已经将此驱动程序与此 USB ID 配对,但有些用户没有。我想使用 libwdi 来注意到这一点并自动安装驱动程序,但仅限于一小部分用户,而且只是第一次。但正如人们所料,将 USB 设备与驱动程序配对需要管理员权限。

因此,理想情况下,应用程序会意识到它需要管理员权限,显示一个弹出窗口,显示“我需要管理员权限才能执行 X 操作”,然后提示用户授予权限,就像安装程序一样。

但是,据我了解,在 Windows 中启动进程后,其运行的权限无法更改。解决这个问题的正确方法是什么?

我知道可以启动一个不同的进程并要求用户通过

runas
向该进程授予管理员权限,但是捆绑一个单独的可执行文件并向其传递所有上下文信息听起来非常不方便。老实说,我正在考虑直接将 C# 代码输出到单独的文件中,然后
dotnet run
处理它...但肯定有更好的方法吗?

c# .net windows uac elevated-privileges
1个回答
0
投票

当您需要做需要管理员的事情时:

  • 使用 ShellExecute
    runas
    动词
  • 再次启动您的应用程序
  • 传递
    /doTheThing
    命令行参数

您的应用程序在启动时检查是否通过了

/doTheThing
命令行参数,如果是,则直接跳到执行该操作。然后退出。

并且您在某处创建一个带有

IDI_SHIELD
的按钮,以便用户知道单击它会导致出现 UAC 提示。

永远不希望UAC提示在没有明显原因的情况下随机出现。它应该始终、始终、始终对用户单击 UAC 盾牌进行特定响应。

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