【问题标题】:Auto Start WinForms Application With Admin Permissions On Non-Admin Account使用非管理员帐户的管理员权限自动启动 WinForms 应用程序
【发布时间】:2013-12-13 13:16:36
【问题描述】:

几天来我一直在努力解决这个问题,但找不到任何可以为我解决问题的帖子。也许我想要的不可能。

我们开发了一个 WinForms 应用程序供公司内部使用。

大多数员工在 Windows 中没有管理员权限。

我们的应用程序需要对机器的管理员访问权限,并且需要在用户登录时自动启动。

这是我尝试过的:

1) 在启动文件夹中添加快捷方式

我可以让应用程序自动启动 (using a relauncher),但它仍然需要管理员在每次重启时都在计算机旁(输入密码)。

2) 注册表项

我创建了一个Software\Microsoft\Windows\CurrentVersion\Run 注册表项来自动启动应用程序。无论我是运行重新启动程序还是应用程序本身,UAC 都会在每次重新启动(或重新登录)时要求输入密码。

3) 计划任务

我创建了一个计划任务,以使用机器上的管理员权限在登录时自动启动应用程序(使用以下帐户)。我还选中了“以最高权限运行”框。 UAC 仍然会在每次重启时弹出。

4) Windows 服务

我尝试将应用程序作为 Windows 服务运行,但它有一个用户界面(被 Windows 服务禁用)。

5) 为特定程序禁用 UAC

看起来您可以disable UAC for a specific program,但这涉及下载应用程序兼容性工具包、创建某种数据库等。我非常希望我们的 IT 人员不必在每台机器上都这样做。在这一点上,这可能是我唯一的选择。

似乎管理员应该能够安装应用程序,以便它在没有提示的情况下自动运行。我错过了这样做的方法吗?

【问题讨论】:

  • 您很可能会造成安全漏洞。

标签: c# windows uac


【解决方案1】:

您应该将您的程序拆分为一个在用户启动时运行的非管理 UI 和一个执行管理任务的管理服务。

要从 UI 运行需要管理员的代码,请使用 WCF 请求服务执行此操作。

请注意,敌对方可能会冒充 UI 并要求服务进行恶意操作;您需要仔细弄清楚该服务应该能够做什么来响应 IPC 调用。

【讨论】:

    【解决方案2】:

    您的问题不是 UAC 问题,而是安全问题。

    答案取决于“需要管理员权限”的应用程序需要做什么。

    • 如果您的应用程序需要能够启动和停止服务,那么用户 需要能够启动和停止服务。在这种情况下,您需要授予用户该权限。
    • 如果用户需要更改或删除文件的能力,那么他们也需要该权限。在这种情况下,将 完全控制 权限授予 Everyone 会更容易。
    • 如果您的应用程序需要能够修改 HKLM 树中的注册表项,那么您可以再次将完全控制授予注册表中的Everyone

    如果您需要您的用户能够修改项目,那么他们需要权限才能修改这些位置。授予他们那些 NTFS 权限并不是一件坏事。 正是这些权限存在的目的 - 控制访问。

    但是为什么

    但是我们问为什么?你在做什么,用户需要管理员的所有权限,管理员的所有能力,管理员的所有权力,但你不想让他们成为管理员组?

    答案几乎都是您的内部使用应用程序不需要需要以管理员身份运行。

    XP 会做什么?

    问题变成:

    你会在 Windows XP 上做什么?

    Windows XP 上的标准用户甚至没有 UAC 便利功能。如果用户想以管理员身份运行应用程序:他们必须退出并以作为管理员身份登录。应用程序在禁用 UAC 的系统上是如何工作的?

    【讨论】:

      【解决方案3】:

      您的应用程序可能很少需要以管理员身份运行 - 其余的以非特权用户身份运行会更好。这很常见(例如,想想自我更新的浏览器)。

      执行此操作的正确方法是安装一个服务来执行特权操作,并让 UI 与该服务进行通信。

      【讨论】:

        【解决方案4】:

        我们的应用程序需要管理员访问机器...

        为什么?

        您无法绕过 UAC 提示,这是设计使然。

        请参阅FAQ: Why can’t I bypass the UAC prompt?,详细讨论原因。摘录:

        如果可以将应用程序标记为以静默提升的权限运行,那么那些存在 LUA 错误的应用程序会变成什么?答案:它们都会被标记为静默提升。未来的 Windows 软件将如何编写?答:默默提升。没有人会真正修复他们的应用程序,最终用户应用程序将继续要求并在不必要的情况下以完全管理权限运行。

        【讨论】:

          猜你喜欢
          • 2013-08-01
          • 1970-01-01
          • 2015-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-05
          • 2018-11-21
          • 1970-01-01
          相关资源
          最近更新 更多