C# 使用 Process.Start() 打开不可用的网络路径

9

我正在使用以下方法通过网络打开目录:

System.Diagnostics.Process.Start(path); // path = UNC network path

但是有两个网络路径:

\\This_PC_Does_Not_Exist\dir

\\This_PC_Is_Turned_Off\dir

第一个为什么很快就能验证网络PC不存在,而第二个需要大约两分钟?如果我没错的话,在Windows环境下确定网络路径是否不可达需要30秒钟。
为什么在这种情况下需要这么长时间,并且如何加速PC关闭的信息?
2个回答

7
为了加载文件,Windows 必须首先与机器建立文件共享连接。 首先查找UNC名称以获取IP地址。 如果该机器不存在,则无法获得IP地址,操作会快速失败(如第一例所示)。 如果存在(如第二个例子),则Windows必须尝试连接。
那么为什么需要两分钟才能超时,而超时时间应该是30秒呢?一个可能性是它会重试几次。另一个可能性是您使用了不同的网络协议,它必须尝试每个协议。

有没有办法限制它?我查看了Process.StartInfo,但似乎没有任何可能有所帮助的参数。 - yosh
@yosh:如果您愿意,可能有一个注册表设置可以缩短那30秒超时时间。我不知道它是什么,但或许您可以在superuser上询问。 - Gabe
嗯,我希望能够通过编程方式限制访问,使用“无重试”和“仅使用TCP”,而不需要修改应用程序之外的任何内容。谢谢! - yosh

1

检查计算机是否开启的更快方法是对计算机进行ping测试。您可以指定任何超时时间。在几秒钟内应该会有响应...

我猜慢响应可能与关闭的计算机名称仍然在网络中被识别并关联了一个IP地址有关。因此,选择了较长的超时时间,因为计算机应该还在那里...


许多计算机没有启用ping功能(由防火墙阻止的ICMP ECHO)。 - Gabe
嗯,检查一下还是值得的。带有超时的ping可能不是理想的解决方案,但在这种情况下可能有效。 - yosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接