在任何用户以提升的权限登录时运行应用程序

在任何用户以提升的权限登录时运行应用程序

我正在尝试让应用程序在任何具有提升权限的用户登录(或会话连接,无论是本地还是远程)时运行,但没有 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,以便用户拥有写入权限。这样运行应用程序不需要管理员权限。

相关内容