我试图从VB脚本转换到C#与一些同事拥有的遗留代码。我似乎无法确定如何转移这条线。任何援助都会有所帮助。将代码转换为C#VB脚本
Set objShell = CreateObject("wscript.shell")
objShell.Run """C:\Program Files\Ipswitch\WS_FTP Professional\ftpscrpt.com"" -f P:\share\getfiles.scp", 1, True
Set objShell = Nothing
我试图从VB脚本转换到C#与一些同事拥有的遗留代码。我似乎无法确定如何转移这条线。任何援助都会有所帮助。将代码转换为C#VB脚本
Set objShell = CreateObject("wscript.shell")
objShell.Run """C:\Program Files\Ipswitch\WS_FTP Professional\ftpscrpt.com"" -f P:\share\getfiles.scp", 1, True
Set objShell = Nothing
这是一些老记我挖出来,但应该工作:
Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files\Ipswitch\WS_FTP Professional\ftpscrpt.com";
proc.StartInfo.Arguments = @"-f P:\share\getfiles.scp";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
// start the process
proc.Start();
// wait for it to finish
proc.WaitForExit(5000);
// get results
string output = proc.StandardOutput.ReadToEnd();
string error = proc.StandardError.ReadToEnd();
我想确切的C#相当于将是这样:
var objShell = Microsoft.VisualBasic.Interaction.CreateObject("wscript.shell");
objShell.Run("\"C:\\Program Files\\Ipswitch\\WS_FTP Professional\\ftpscrpt.com\\" -f P:\share\getfiles.scp", 1, true);
objShell = null;
不过说真的,你应该只添加一个引用到装配有问题,并直接调用它的方法。
参见example(向下滚动到例子)的信息,执行命令。您可以尝试更改UseShellExecute选项以获得接近的结果。
随着等待时间的量猜测,我更愿意无限期地等待 - 'proc.WaitForExit(;' - 或以明确地超时 –
@ Ekkehard.Horner等待的金额有时可能是猜测,但我认为会有一段合理的时间完成,如果没有,那么可能需要一些补救措施,等待无限期地有它的优点,但我会说它不应该是规范。当然,这是为了帮助操作,而不是逐字采取:) – Jason
这工作得很好。我假设StandardError.ReadToEnd应该是空的,如果过程完成没有任何问题? – steventnorris