如何在Windows服务上设置权限

时间:2012-04-17 20:40:35

标签: c# windows-7 permissions windows-services

所以我使用C#创建了一个Windows服务,并在Visual Studio中为它创建了一个安装程序。它被设置为手动运行,因为我不希望它一直运行。然后,我有另一个应用程序(C#WPF)应该有一个选项来打开和关闭服务(服务本身创建一个Web服务,然后反馈回我的WPF应用程序)。这在Windows XP中运行良好,但在Windows 7计算机上进行测试,它将无法启动。令人惊讶的是,它确实抛出异常并崩溃,它什么都不做。我相信这是一个权限问题。如果我使用相同的Windows 7帐户转到服务控制面板,我也无法启动或停止服务。

所以我的问题是,有没有办法设置我的服务,以便常规用户帐户可以启动和停止它?有没有办法设置我的安装程序自动执行此操作。

我不希望我的WPF应用程序以管理员身份运行!

2 个答案:

答案 0 :(得分:2)

虽然我认为可以保护服务以便普通用户可以启动和停止服务,但我不建议这样做。这将产生许多复杂性,并且可能导致混淆。我总是喜欢保持简单,特别是在安装和安全方面。

因此,如果我们不能让用户启动和停止服务,我们可能需要让服务一直运行。由于您不希望服务始终处于活动状态,因此我建议您为服务提供自己的内部Running标志。如果设置为true,则服务处于活动状态并执行繁忙操作,否则服务将保持空闲状态。您可以使用首选的IPC机制(套接字,命名管道,WCF等)来允许用户切换此开关。

答案 1 :(得分:1)

Windows 8具有允许服务按需启动的功能,基本上是为了响应某种触发器。但对于Windows 7,您唯一真正的选择是将其设置为在启动时自动启动。你可以将它设置为开始延迟,这样它就不会增加启动窗口的时间。

普通用户无法启动和停止服务。

编辑:阅读上面评论中的链接听起来对我来说,因为这是用户启动和停止服务的一揽子能力。我认为这里的问题是关于如何为特定服务执行此操作。

此外,尽管可以将服务设置为以特定用户身份运行,但这实际上意味着它仅适用于该特定用户,而工作站上的其他用户将无法使用该应用程序无法启动或停止服务,假设以用户身份运行的服务暗示用户可以控制它,这可能不是这种情况。

另外,在阅读评论和其他答案时,我还想知道任何可以运行该应用程序的用户是否可以使用该服务。也就是说,如果用户A登录到工作站并启动此应用程序(以及服务),将其锁定并离开,当使用B登录并尝试运行相同的服务时会发生什么?该服务是否可以同时支持多个用户,或者如果应用程序运行多次,则会发生有趣的事情。

这听起来很像是在应用程序启动时启动后台所需的。这个线程(或多个线程)将完成服务的工作,并且它们的性质将在应用程序结束时结束。当然,问题中的更多细节将有助于给出更好的答案。

当然,如果它作为一项服务是合适的,我认为没有理由不让一个服务与一个休眠的工作线程,另一个计时器线程作为一个生产者来检查是否有工作要做。