我正在做一个Windows服务,它在启动时必须具有网络连接。代码是用 c# 编写的,我使用
serviceInstaller.ServicesDependedOn = new string[] { "Tcpip" };
我可以看到在Windows服务管理器上正确输入了依赖项,但是重新启动后我的服务无法启动,因为它无法连接到网络,在主机获得IP后,服务正确启动。
我尝试使用"Tcpip"和"Dhcp"服务。它应该依赖哪种服务?
服务需要网络连接,因为它的目的是通过SSH安装单元
谢谢!
我们一直在使依赖于网络启动的服务依赖于"服务器"服务。它的实际名称是"LanmanServer"。这对我们来说一直很好。如果你看一下它的描述,它说:
支持通过网络对此计算机进行文件、打印和命名管道共享。如果停止此服务,这些功能将不可用。如果禁用此服务,则显式依赖它的任何服务都将无法启动。
我们的想法是,如果计算机准备好执行这些功能,那么就必须启动网络。
我使用"Tcpip","Dhcp","Dnscache"。对我来说效果很好。
根据接受答案中提到的LanmanServer
@user957902在Windows Server 2019上不起作用(好吧,至少对我和其他一些人而言)。
在Windows Server 2019中,我认为无法使用服务依赖项解决此问题。
我在我的 Windows 服务中通过等待互联网连接建立,使用以下代码解决了这个问题(只需调用 WaitUntilInternetConnectionAvailable
方法):
public static class WinINet
{
[DllImport("wininet.dll")]
public static extern bool InternetGetConnectedState(out int description, int reservedValue);
}
...
public static bool WaitUntilInternetConnectionAvailable(TimeSpan timeout, TimeSpan checkEvery)
{
var sw = Stopwatch.StartNew();
while (sw.Elapsed < timeout)
{
if (IsInternetConnectionAvailable())
{
return true;
}
Thread.Sleep(checkEvery);
}
return false;
}
public static bool IsInternetConnectionAvailable()
{
return WinINet.InternetGetConnectedState(out _, 0);
}