当用户从我的应用程序保存文件时,他们当前无法保存到受限位置(例如 C:)。我认为这是一个很好的限制,但我想提供一个 UAC 提示来提升权限并允许用户在受限区域中保存。
我已经看到了很多围绕这个主题的答案,其中涉及使用“runas”生成具有提升权限的新进程。此外,这似乎可以通过冒充另一个用户来完成。据我了解,这两种方法都需要用户提供用户凭据。
我想做的基本上就是 Windows 本身所做的事情。当您尝试将文件复制到 Windows 7 中的 C:\ 时(假设您已将 UAC 设置为默认级别),您会收到以下提示:
单击带有 UAC 防护罩的“继续”按钮后,文件将被复制到 C:\,并且不会提示输入凭据(假设您以管理员权限登录)。
如何在我的应用程序中为管理员用户复制此行为?他们不必冒充任何其他用户,因为他们已经拥有管理员权限。任何人都可以提供有关 Windows 在此过程中所做的详细信息吗?他们是否会生成具有提升权限的新 explorer.exe 进程?
您需要做 Windows 所做的事情。并产生一个将以提升的权限运行的新进程。这里没有捷径。进程启动时分配的令牌决定了该进程拥有哪些权限。进程开始后该令牌无法更改。如果需要提升,就需要新的流程。
我已经看到了很多围绕这个主题的答案,其中涉及使用“runas”生成具有提升权限的新进程。此外,这似乎可以通过冒充另一个用户来完成。据我了解,这两种方法都需要用户提供用户凭据。
不,事实并非如此。如果当前用户不是管理员,则 UAC 对话框将提示输入具有管理员权限的用户的新凭据。这就是过肩式UAC 对话框。另一方面,如果当前用户是管理员,那么他们只会获得consent对话。这是安全桌面上显示的对话框,仅要求您单击“继续”。
Windows 组件可以做但您不能做的一件事是在不向您显示同意对话框的情况下启动提升的进程。这种情况仅发生在 Windows 7 上(不会在 Vista 上),并且仅当您在新版本中具有 UAC 设置时才会发生这种情况。DefaultWindows 7 中添加的设置。这就是资源管理器如何能够显示问题中包含的对话框,然后启动提升的进程来进行复制,而不显示同意 UAC 对话框。只有 Windows 组件才被授予该能力。
但最重要的是,您需要启动一个运行提升的新进程。使用runas
动词是执行此操作的规范方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)