Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows services 确保登录前运行windows服务_Windows Services - Fatal编程技术网

Windows services 确保登录前运行windows服务

Windows services 确保登录前运行windows服务,windows-services,Windows Services,我构建了一个作为windows服务运行的应用程序,并通过我的代码安装 除了登录,一切正常 在第一个windows xp/2003服务器登录屏幕上,我不确定该服务是否正在运行。如果是,那么它确实可以工作,因为它不起作用(服务正在使用WINPCAP,所以这可能是一个问题) 服务设置设置为“与桌面交互”,并作为系统运行 如何确保服务在windows登录之前启动?此外,即使在注销后,我如何确保它运行? < P>有两个问题需要考虑。 首先,您可以通过将事件记录到Windows事件日志来检查您的服务在登录之

我构建了一个作为windows服务运行的应用程序,并通过我的代码安装

除了登录,一切正常

在第一个windows xp/2003服务器登录屏幕上,我不确定该服务是否正在运行。如果是,那么它确实可以工作,因为它不起作用(服务正在使用WINPCAP,所以这可能是一个问题)

服务设置设置为“与桌面交互”,并作为系统运行


如何确保服务在windows登录之前启动?此外,即使在注销后,我如何确保它运行?

< P>有两个问题需要考虑。

  • 首先,您可以通过将事件记录到Windows事件日志来检查您的服务在登录之前和注销之后是否确实在运行。几乎所有服务在启动和停止时都会这样做,您的服务也应该这样做

  • WinPcap可能是问题的一部分。在服务中使用WinPcap有两条黄金规则

    1a)在您自己的服务启动时,您的服务不得执行任何可能导致WinPcap服务尝试启动的操作,因为这将导致Windows服务控制管理器中出现死锁。这意味着,如果在服务开始启动时WinPcap服务尚未运行,则在服务运行之前,您不得执行任何可能导致其启动的操作

    有两种方法可以确保这一点。或者使您的服务依赖于网络包过滤服务npf。或者在服务运行之前不要调用任何WinPcap函数。我没有试过后一种方法。我假定WinPcap函数将阻塞,直到npf正在运行服务

    1b)如果您使您的服务依赖于npf,您还必须使其依赖于nm(网络监视器驱动程序)-如果且仅当系统上安装了nm。nm为WinPcap提供PPP/VPN支持,WinPcap在安装后总是尝试使用它。显然,如果您将nm作为服务的依赖项,并且没有安装nm,那么您的服务将无法启动

  • 我认为没有一种方法可以保证你的服务在桌面出现之前启动。但是,您可以创建一个服务控制组,将其添加到现有服务控制组列表的末尾,并将您的服务放入该组中,从而帮助完成工作。我并不完全相信这是一种“认可的”方式,可以让您的服务更快地开始,因为如果有一种认可的方式,那么每个人都会这样做,而且它将不再有效。但有人建议,在启动组中的服务之前,先启动组中的服务

    查看HKEY_LOCAL_MACHINE,“SYSTEM\CurrentControlSet\Control\GroupOrderList”和HKEY_LOCAL_MACHINE“SYSTEM\CurrentControlSet\Control\ServiceGroupOrder”,并进行一些谷歌搜索