C# 在用户登录之前,如何运行Windows应用程序?

C# 在用户登录之前,如何运行Windows应用程序?,c#,.net,windows,windows-services,C#,.net,Windows,Windows Services,可能重复: 我已经用C#写了一个应用程序。我想在登录Windows操作系统之前(在Windows操作系统预加载之后)运行我的应用程序。 如何才能做到这一点?登录前必须运行服务。必须是Windows服务,并且需要将服务安装/配置为“自动启动”唯一的方法是创建Windows服务而不是应用程序。由于服务不是用户模式应用程序,因此即使没有用户登录,也允许它们运行 然而,这还有其他的警告。大多数开发人员只了解上述内容,并认为他们需要编写Windows服务。这是不正确的:在现实中,很少有人真的需要写这些东

可能重复:

我已经用C#写了一个应用程序。我想在登录Windows操作系统之前(在Windows操作系统预加载之后)运行我的应用程序。
如何才能做到这一点?

登录前必须运行服务。

必须是Windows服务,并且需要将服务安装/配置为“自动启动”

唯一的方法是创建Windows服务而不是应用程序。由于服务不是用户模式应用程序,因此即使没有用户登录,也允许它们运行

然而,这还有其他的警告。大多数开发人员只了解上述内容,并认为他们需要编写Windows服务。这是不正确的:在现实中,很少有人真的需要写这些东西。如上所述,它们不是用户模式应用程序,因此不能显示任何类型的用户界面。它们仅设计为在后台运行,并且适用于用户不需要以任何方式与它们交互的情况,而[很少]停止和启动它们

如果您已经有一个带有用户界面的常规应用程序,则创建Windows服务不是您的选项。您的应用程序将无法移植到服务,您将再次询问六个关于看似无法解释的行为、系统崩溃以及无法执行各种操作的问题。服务不是应用程序的替代品:它是一种完全不同的产品,需要完全不同的设计方法

那么你有什么选择?基本上没什么。Windows是一个多用户操作系统。如果用户未登录,则无法运行用户模式应用程序。您可以做的最好的事情是将应用程序添加到所有用户帐户共享的“启动”文件夹中,然后将计算机配置为在启动时自动登录特定用户。这样,在没有用户登录的情况下,计算机永远不会运行,因此应用程序也不会运行

为此,您需要在计算机上配置组策略,这将要求您具有对它们的管理访问权限,并且不会在您不拥有的计算机(例如属于客户的计算机)上工作。这实际上是一件好事,因为对于一般用途的应用程序来说,这是非常糟糕的设计


在我们为系统管理员设计的姐妹网站上,询问更多有关设置组策略的问题。

这不是全部答案。Windows服务不是应用程序,它们受到一些重要的限制,这些限制通常会破坏交易。其中,服务不能显示任何类型的用户界面。在大多数情况下,开发人员认为他们需要编写服务,但他们错了。实际上,根据Microsoft的说法,Windows服务被视为应用程序。其次,他唯一的选择是运行服务,因为只有这些应用程序才能在用户未登录时运行。但是,它们不能在用户环境下运行。好的,是的,它们在很多方面都是应用程序,但是对于大多数开发人员来说,这些方式都是不相关的。它们不是用户模式的应用程序;我在回答问题时已详细说明了这一点。是的,我同意这是在这种情况下唯一的选择,我没有说你的答案是“错的”。我只是说这不是全部答案。你会惊讶地发现,这里有这么多的问题来自那些不知道或不理解为什么他们不能从Windows服务中显示对话框或消息框的人。在某些时候,有人用这种类型的答案误导了他们。我明白你的意思,所以我将补充我的答案。不可能有一个带有服务的UI。但是,您可以做的是将UI移植到另一个应用程序。获取登录前需要运行的代码,并使其成为服务。那么,如果两者必须协同工作,那么您需要提供一种通信途径。-感谢您的详细回答。虽然服务不能直接拥有任何类型的用户界面,但它可以与提供用户界面的应用程序进行通信。因此,根据应用程序的不同,可以从应用程序中提取某些功能部分,这些功能可以转化为服务,然后通过管道、共享内存、套接字等与应用程序进行通信。@Henk:谢谢,我知道我以前已经回答过这个问题,我就是找不到。@Cody:在右边的相关列表中。。。