2

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

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

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

4

2 回答 2

2

虽然我相信可以保护服务,以便普通用户可以启动和停止它,但我不建议这样做。这会造成很多复杂性,并且是造成混乱的潜在原因。我总是喜欢保持简单,尤其是在安装和安全方面。

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

于 2012-04-18T14:33:05.103 回答
1

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

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

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

此外,虽然可以将服务设置为以该特定用户身份运行,但这实际上意味着它仅适用于该特定用户,工作站上的其他用户将无法使用该应用程序,因为他们无法使用启动或停止服务,假设服务作为用户运行意味着用户可以控制它,但情况可能并非如此。

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

这听起来确实像是希望在应用程序启动时启动背景。该线程(或多个线程)将完成服务的工作,并且就其性质而言,将在应用程序结束时结束。当然,问题中的更多细节将有助于给出更好的答案。

当然,如果它适合作为服务,我认为没有理由不提供具有睡眠工作线程的服务,以及另一个充当生产者的计时器线程,以检查是否有工作要做。

于 2012-04-17T20:49:38.890 回答