登录前,Windows服务访问网络

时间:2014-12-11 10:42:42

标签: java windows windows-services procrun

我用Java编写了一个Windows服务,它自动启动(在用户登录Windows之前)。 我的问题是看起来服务在登录前无法访问网络。

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

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

有人可以帮忙吗?

顺便说一句:

  1. 不涉及WiFi

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

2 个答案:

答案 0 :(得分:2)

我设法解决了这个问题。问题是该服务在访问互联网之前就开始了。请记住,网络可能是可访问的,但互联网不是。

我通过这样做解决了:(伪代码)

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

答案 1 :(得分:0)

如果获得的异常是UnknownHostException,这意味着某种方式DNS解析失败..

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

因此,虽然您可能尝试在休眠循环中解析主机分辨率(如Kuf建议的那样)。我建议尝试记录重启后机器获取IP地址的时间(它是多久它连接到网络的标志),然后从那里(可能是额外的SuperUser或ServerFault问题)。