18

我正在做一个 Windows 服务,它在启动时必须具有网络连接。代码在 c# 中,我将服务设置为依赖于其他人

serviceInstaller.ServicesDependedOn = new string[] { "Tcpip" };

我可以看到在 Windows 服务管理器上正确输入了依赖项,但是在重新启动后,我的服务无法启动,因为它无法连接到网络,在主机获得 IP 后,服务正确启动。

我尝试使用“Tcpip”和“Dhcp”服务。它应该依赖于哪个服务?

服务需要网络连接,因为它的目的是通过 ssh 挂载一个单元

谢谢!

4

3 回答 3

11

我们一直在使依赖于网络的服务开始启动,依赖于“服务器”服务。它的实际名称是“LanmanServer”。这对我们来说工作正常。如果你看它的描述,它会说:

支持此计算机通过网络共享文件、打印和命名管道。如果此服务停止,这些功能将不可用。如果禁用此服务,任何显式依赖它的服务都将无法启动。

我们的想法是,如果计算机已准备好执行这些功能,则必须启动网络。

于 2012-06-01T20:30:22.770 回答
1

我使用“Tcpip”、“Dhcp”、“Dnscache”。对我来说没问题。

于 2013-11-08T11:47:43.777 回答
0

取决于LanmanServer接受的答案中提到的 @user957902 在 Windows Server 2019 上不起作用(嗯,至少对我和其他一些人来说)。

在 Windows Server 2019 中,我认为无法使用服务依赖项解决此问题。

我在我的 Windows 服务中解决了这个问题,方法是等待 Internet 连接建立,使用以下代码(只需调用该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);
}
于 2022-01-08T13:14:01.850 回答