我用Java编写了一个Windows服务,它自动启动(在用户登录Windows之前)。 我的问题是看起来服务在登录前无法访问网络。
在日志中,我看到在登录之前,我得到:java.net.UnknownHostException
。但是,登录后相同的代码工作正常。
我尝试将服务定义为“网络服务”,但没有帮助。
有人可以帮忙吗?
顺便说一句:
不涉及WiFi
我看了TeamViewer程序是如何工作的,我看到他们在FirewallPolicy中有一些注册表值。他们将服务定义为本地系统。 这让我觉得它可能与防火墙设置有关,但我在网上找不到任何关于它的内容。
答案 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问题)。