关于在锁定的用户帐户上运行需要管理员权限的应用程序

时间:2011-03-23 23:36:23

标签: c# windows-services manifest

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在这个例子中我做了什么:

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

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

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

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

如果你需要更多动手实例,请告诉我,我可以把它放在一起。