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 权限或注册表权限。如果用户需要完全控制,则赋予用户完全控制权限。