0

我想知道,是否有任何库可以使当我在 Windows 中运行需要管理员的进程时,会弹出一个名为 UAC(用户访问控制)的窗口。

例如,我想在一台可供多个用户使用的计算机上安装我的 java 应用程序,该程序需要使用 Windows 注册表中的 Java Preferences API 存储设置,我可以访问单个首选项,但我无法从任何访问系统首选项用户帐号。

请不要告诉我将用户从标准更改为管理员,让我们说我在计算机客户端所在的位置并且用户对更改帐户一无所知,系统将要求每个用户提升。请帮助并提前感谢您。如果你不知道任何图书馆,请不要说这是不可能的。

4

1 回答 1

1

Windows 不允许应用程序的“部分”以管理员身份运行。要么整个​​进程以管理员身份运行,要么整个进程以标准用户身份运行。

如果您的标准权限用户需要能够访问某些内容,默认情况下只有管理员可以访问,那么您有两种选择:

1. 在安装过程中,更改这些系统范围设置的权限,以便所有用户都可以访问它们。

您说过应该允许所有用户修改这些 Java 设置。因此,您应该修改控制对这些应用程序设置的访问权限,以便所有用户都可以修改它们。我不知道 Java 在哪里存储东西,但我认为它在某个文件中。

2. 创建一个按钮来临时允许用户修改这些设置。

您说应该允许所有用户修改这些机器范围的设置。但我假设你对实际允许这样做感到紧张。在这种情况下,您实际上希望所有用户都修改这些机器范围的设置。这就是为什么您可以在大多数情况下正常使用您的应用程序功能的原因。

但是当需要做一些需要管理权限的事情时,您可以使用 Windows 功能ShellExecuteEx以管理员身份启动应用程序的副本,方法是使用runas动词,并传递一个命令行参数,指示程序应该直接跳转到修改仅限管理员的东西:

    ShellExecute(0, "MyApp.exe", "runas", "/configureMachineWideStuff")

然后在应用程序启动期间寻找/configureMachineWideStuff命令行开关,并将用户直接带到他们可以更改管理员权限的地方。

您甚至可以花哨,并检测用户是否是管理员。如果没有,请使用 Windows API 以编程方式将 UAC 盾牌图标添加到您的配置按钮:

SendMessage(button.Handle, BCM_SETSHIELD, 0, 1);

在此处输入图像描述

但是要回答你的问题

不,没有图书馆。您要求做的事情在运行任何操作系统的任何计算机上都是不可能的。

但我强烈建议你思考:

你在 Windows XP 上做什么?

当用户是在 Windows XP 上运行的标准用户时,您会怎么做?如果 UAC 在 Windows Vista/7/8/8.1 上被禁用,你想要什么?用户是否只是卡住了;无法运行您的应用程序?当它无法读取机器范围的值时,它是否会严重崩溃?那么谁来改变价值观呢?

UAC 是一项便利功能;它只是为了让您的用户的生活更轻松。另一种方法是用户必须注销并以管理员身份登录。

而且由于您已经说过唯一的用户标准用户,因此他们不知道任何管理员的凭据。

因此,您可以在应用程序安装期间重新使用选项 #1:更改 NTFS 权限或注册表权限。如果用户需要完全控制,则赋予用户完全控制权限。

于 2014-01-01T18:18:53.973 回答