我正在尝试让应用程序在任何具有提升权限的用户登录(或会话连接,无论是本地还是远程)时运行,但没有 UAC 提示。添加新用户时,应用程序也应该在他登录时运行,无需额外设置。
为了测试目的,我已使用 Windows 10 Enterprise v.1709 设置 Hyper-V 计算机。在计算机上,我有一个主帐户(称为“Admin”),位于管理员组中,还有一个帐户(称为“User”),仅位于用户组中。
我创建了简单的 WPF 应用程序,它显示当前用户及其是否具有管理员权限。最终应用程序也将是 WPF。
我将使用 WiX 为我的应用程序套件(上述应用程序、Windows 服务,也许还有其他东西)创建安装程序。标题中的行为必须在安装期间自动设置。在安装时,我可以做任何我想做的事情,只受 WiX 功能的限制,但它允许我在安装期间运行自定义应用程序(C#),所以我认为没有任何限制。安装将从具有管理员权限的帐户运行。
以下是我所尝试过的方法以及结果:
应用程序位于 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
未选中“以管理员身份运行此程序”
管理员:启动,无管理员权限
用户:启动,无管理员权限
为所有用户检查“以管理员身份运行此程序”
管理员:无法启动
用户:未启动
HKLM\Software\Microsoft\Windows\CurrentVersion\Run 中的条目
未选中“以管理员身份运行此程序”
管理员:启动,无管理员权限
用户:启动,无管理员权限
为所有用户检查“以管理员身份运行此程序”
管理员:无法启动
用户:未启动
任务计划程序,触发“任何用户登录时”
没有其他选择
管理员:无法启动
用户:未启动
勾选“以最高权限运行”
Admin:启动,管理员权限
用户:未启动
为所有用户检查“以管理员身份运行此程序”
管理员:无法启动
用户:未启动
为所有用户选中“以管理员身份运行此程序”,选中“以最高权限运行”
Admin:启动,管理员权限
用户:未启动
如何做到?当应用程序根本没有运行时,事件查看器似乎不会记录任何特定信息。它应该在那里吗?或者这些日志可能放在其他地方?那么在哪里?
目标:Windows 8+、Server 2012+
答案1
如果您必须使用 GUI,那么处理此问题的正确方法是使用 GUI 应用程序和单独的系统服务。服务执行实际工作,而 GUI 只向其传递命令。可以使用模拟来允许服务充当用户。
如果您需要管理员权限的唯一原因是写入 HKLM 键,那么管理员权限就是错误的方法。在安装程序中,创建注册表项并更改该项上的 ACL,以便用户拥有写入权限。这样运行应用程序不需要管理员权限。