在非管理员帐户上使用管理员权限自动启动WinForms应用程序

时间:2013-11-27 18:26:05

标签: c# windows uac

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

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

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

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

这是我尝试过的:

1)在Startup文件夹中放置快捷方式

我可以让应用程序自动启动(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人员不必在每台机器上都这样做。在这一点上,这可能是我唯一的选择。

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

4 个答案:

答案 0 :(得分:5)

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

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

请注意,敌对方可能冒充用户界面并要求服务部门进行恶意攻击;你需要仔细弄清楚服务应该如何响应IPC调用。

答案 1 :(得分:1)

您的问题不是UAC问题,这是一个安全问题。

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

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

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

但为什么

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

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

XP会做什么?

问题变成:

  

你会在Windows XP上做什么?

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  

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

为什么?

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

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

  

如果可以将应用程序标记为以静默提升的权限运行,那么所有那些带有LUA错误的应用程序会变成什么样?答:他们都被标记为默默地提升。未来的Windows软件将如何编写?答:默默地提升。实际上没有人会修复他们的应用程序,最终用户应用程序将继续需要并以不必要的方式运行完整的管理权限。