如何提示用户访问控制

时间:2013-09-24 10:16:00

标签: java windows uac

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

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

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

1 个答案:

答案 0 :(得分:1)

Windows不允许以管理员身份运行应用程序的“parts”整个进程以管理员身份运行,或整个进程以标准用户身份运行。

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

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

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

2。创建一个按钮,暂时允许用户修改这些设置。

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

但是,当需要执行需要管理员权限的操作时,您可以使用Windows函数ShellExecuteEx以管理员身份使用runas动词启动应用程序的副本,并传递命令行参数,指示程序应该跳转到修改仅管理员的东西:

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

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

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

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

enter image description here

但要回答你的问题

不,没有图书馆。在任何运行任何操作系统的计算机上都无法执行您要求的操作。

但我 强烈 敦促您思考:

  

你在Windows XP上做什么?

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

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

既然你说只有 是标准用户,那么他们就不知道任何管理员的凭据。

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