【发布时间】:2014-05-11 21:36:43
【问题描述】:
我必须通过代码启动 VPN 连接 (Fortinet)。 我有一个建立连接的 cmd 文件。 如果我在 shell 上调用 cmd 文件,它工作得很好。 当我通过 Process.Start 调用它时,它什么也不做。 它没有抛出任何异常,它似乎执行但VPN没有连接。
在标准输出上,我可以读取我放在 cmd 文件中的回显(因此它正在执行正确的文件)。 我启动了 ping -d 来查看 vpn 何时启动,当我通过 shell 调用它时,它会在几秒钟内启动,而通过 C# 则不会。
我也尝试了 sleep(30000) 但没有。
我的 cmd (ConnectFile.cmd):
@echo off
@echo Connecting to VPN
"C:\Program Files (x86)\Fortinet\SslvpnClient\FortiSSLVPNclient.exe" connect -s "vpn myvpn"
我的代码(connectFile 和 disconnectFile 是包含 cmd 文件完整路径的字符串):
try
{
var startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = connectFile;
startInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(connectFile) ?? "";
System.Diagnostics.Process process = System.Diagnostics.Process.Start(startInfo);
System.Threading.Thread.Sleep(30000);
base.GetFiles(folder);
}
finally
{
System.Diagnostics.Process.Start(disconnectFile);
}
【问题讨论】:
-
“当前目录”是否重要?
-
为什么
UseShellExecute = false; -
您预计
FortiSSLVPNclient需要多长时间? (即它是否足够长,所以您会看到cmd.exe实例启动)。如果时间不长,请考虑在批处理中延迟,以便确保批处理文件正在运行。总结:找到你可以处理的最简单的部分:批处理文件是否执行? -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
感谢您编辑标题。