Java 登录前windows服务对网络的访问

Java 登录前windows服务对网络的访问,java,windows,windows-services,procrun,Java,Windows,Windows Services,Procrun,我用Java编写了一个windows服务,它会自动启动(在用户登录windows之前)。 我的问题是,该服务在登录之前似乎无法访问网络 在登录之前的日志中,我看到:java.net.UnknownHostException。但是,相同的代码在登录后可以正常工作 我试图将服务定义为“网络服务”,但没有帮助 有人能帮忙吗 顺便说一句: 没有涉及WiFi 我查看了TeamViewer程序的工作原理,发现它们在FirewallPolicy中有一些注册表值。他们将他们的服务定义为本地系统。 这让我觉得可能

我用Java编写了一个windows服务,它会自动启动(在用户登录windows之前)。 我的问题是,该服务在登录之前似乎无法访问网络

在登录之前的日志中,我看到:
java.net.UnknownHostException
。但是,相同的代码在登录后可以正常工作

我试图将服务定义为“网络服务”,但没有帮助

有人能帮忙吗

顺便说一句:

  • 没有涉及WiFi

  • 我查看了TeamViewer程序的工作原理,发现它们在FirewallPolicy中有一些注册表值。他们将他们的服务定义为本地系统。 这让我觉得可能与防火墙设置有关,但我在网上找不到任何关于它的信息


  • 我只是设法解决了这个问题。问题是这项服务在接入互联网之前就启动了。请记住,网络可能是可访问的,但internet不是

    我通过以下操作解决了这个问题:(伪代码)


    如果得到的异常是
    未知hostexception
    ,这将意味着DNS解析以某种方式失败

    进一步注意,DNS解析本身取决于IP。因此,如果相关机器连接到相应网关(路由器)的速度较慢,则DNS解析没有成功的机会

    因此,虽然您可以尝试在一个带有睡眠的循环中解析主机解析(正如Kuf所建议的)。。我建议尝试记录机器在重启后多久获得IP地址(这是它连接到网络的时间的标志),然后从那里开始(可能还有额外的超级用户或服务器故障问题)

    while (false) {
        check if http://www.example.com is accesible:
            if true - break
            if false - sleep for 3 seconds
    }
    ... (rest of the code)