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