【问题标题】:about running an application which requires admin privileges on a locked down user account关于在锁定的用户帐户上运行需要管理员权限的应用程序
【发布时间】:2011-03-23 23:36:22
【问题描述】:

我有一个在标准用户帐户下运行的 Winforms 应用程序(即用户帐户登录,应用程序在该指定用户下运行)。但是,这个应用程序需要执行一些操作(写入注册表就是其中之一),这需要管理员权限,并重新启动服务(我要避免的问题是:Service Controller not able to start service - Access denied)。

解决此问题的一种方法是使用清单文件使整个应用程序以管理员身份运行。或者,如果我编写一个在最高功率帐户(我相信是本地系统)下运行的 Windows 服务(称为 x),它可以工作,它可以完成所有高功率帐户所需的东西,然后又调用存在的服务,我需要操作并在命名/登录的用户帐户(因此是标准用户)下运行。如果是这样,我如何调用 Windows 服务来按需运行(或者控制台应用程序会更好)?

【问题讨论】:

  • 是否会从您的应用程序中生成一个运行批处理脚本(您可以动态构建)的进程来解决问题?
  • 可能。我实际上是在考虑创建一个进程对象,它可以在某些凭据下执行控制台应用程序(实际上类似的想法)。
  • 你写信到哪里?我相信无论管理员权限如何,当前用户都允许写入 HKCU,但 HKLM 和 HKCR 仅限于管理员和系统。
  • 您可以尝试使用yourObject.Start.Verb="runas" (iirc) 启动此进程对象,但我认为您的用户可能会收到 UAC 提示。这有关系吗?
  • 哦,没关系,注册表部分不是你的问题

标签: c# windows-services manifest


【解决方案1】:

在这种情况下我会做什么:

对于服务,请使用此工具来允许您有限的帐户组或用户权限启动/停止: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en 还有一点关于如何使用: http://ss64.com/nt/subinacl.html

至于注册表,您需要找到相应的注册表项 > 右键单击​​ > 权限 >“用户”组的“完全控制”或需要这些调整权限的特定“受限”组的名称。

我通常从安装程序中的脚本或安装脚本运行这一切。该脚本调整非常具体的必要事物的权限,注册表/服务/文件/文件夹。这允许软件在受限权限用户的上下文中运行,而不是通过管理员权限提升。

作为一个工作示例,我将其用于我为非管理员用户构建的自定义 OpenVPN 实现。我必须允许他们启动/停止服务并写入日志文件(在程序文件夹中)。

如果您需要更多动手实践示例,请告诉我,我可能会一起整理一些东西。

【讨论】:

    【解决方案2】:

    您可以拥有一个管理员任务助手进程(第二个可执行文件),它通过清单文件以管理员身份运行。

    然后您的普通应用程序可以在受限用户下运行,但是当您想要执行管理任务时,您可以通过 Process 类启动您的帮助进程。 Windows 应提示提升(向管理员),只是为了执行您想要的任务。

    【讨论】:

    • 嘿,看,当我发布我的答案时,你发表了一条评论,说的差不多。
    • 有没有办法绕过/隐藏登录框?我认为这样的windows服务可能会很好。
    • 谢谢。在这种情况下,一个静默的 Windows 服务可能是要走的路。最终用户不会了解基于管理员的帐户。因此,如果我的服务中有间接层,我希望它能起作用。或创建一个流程对象,执行它等,并将帐户详细信息设置为相关帐户的详细信息。
    • @dotnetdev:不。如果可以的话,它会破坏 UAC 的全部目的,即防止应用程序在未经用户许可的情况下做他们不应该做的事情。
    • 我明白了。最后一件事 - 执行一个进程(通过 c# 对象)并将用户名设置为管理员用户名怎么样?
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2011-05-31
    • 2013-03-04
    • 2021-09-08
    • 1970-01-01
    • 2013-12-13
    • 2010-12-24
    • 2015-07-12
    相关资源
    最近更新 更多