Windows服务何时实际启动



我问这个问题是因为我的C#项目有问题。为了解决这个问题,我知道重新设计我的代码就足够了,但如果Windows服务没有按照我认为的方式启动,那么我需要做更多的思考。

因此,我需要回答这个问题。。。

Windows服务到底是什么时候启动的,或者这是开发人员可以选择的,如果是,我可以在代码中的什么地方启动?

更多信息:

  • 我知道有延迟启动。。。但它并不是那么可靠,有了它,我的服务有时会正确启动,而在其他时候则不会。因为它依赖于VirtualBox或HD来设置。

  • 我尝试在服务启动时使用一个单独的线程来给系统时间来解决问题,这在最初解决了问题,但在进一步测试后意识到,如果用户想停止我的服务,它就会变成一个问题,因为线程仍将处于活动状态。并创建了一个bug。

如果是这样的话,有没有办法知道硬盘什么时候稳定下来(启动完成)来启动这个过程?

您所描述的或多或少就是延迟启动的含义。

我知道有延迟启动。。。但它并不是那么可靠,有了它,我的服务有时会正确启动,而在其他时候则不会。因为它依赖于VirtualBox或HD来设置。

哎呀。听起来你真的不想等待硬盘稳定下来——你想等待VirtualBox完成一些事情。当Windows启动所有延迟启动服务时,VirtualBox有时已经完成了工作,有时还没有完成。所以,这是行不通的。

打开服务的属性表,然后单击依赖项选项卡。您可能没有列出任何内容。现在,打开"传真"服务,转到那个选项卡。你会看到这个服务依赖于"电话"服务。有道理。

Windows也有同样的问题——有些服务依赖于其他服务,Windows需要确保一切都按正确的顺序进行。你也应该这样做。希望您可以等待VirtualBox服务。如果可以的话,请设置服务安装程序以正确调用其依赖项:

此列是系统在此服务之前必须启动的服务或加载顺序组的名称列表。用Nulls分隔列表中的名称。如果服务没有依赖项,则指定Null或空字符串。使用语法[~]插入Null。对组的依赖意味着,如果在尝试启动组的所有成员后,组中至少有一个成员正在运行,则可以运行此服务。

您的安装程序可能会自动执行此过程。

或者,更手动地,您可以在Start()方法中等待磁盘上发生一些事情。例如,如果您正在等待创建一个文件,请让FileSystemWatcher查找该文件,并在创建时通知您。

最新更新