2013-05-22 138 views
1

我试图从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 

回答

2

这是一些老记我挖出来,但应该工作:

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(); 
+0

随着等待时间的量猜测,我更愿意无限期地等待 - 'proc.WaitForExit(;' - 或以明确地超时 –

+0

@ Ekkehard.Horner等待的金额有时可能是猜测,但我认为会有一段合理的时间完成,如果没有,那么可能需要一些补救措施,等待无限期地有它的优点,但我会说它不应该是规范。当然,这是为了帮助操作,而不是逐字采取:) – Jason

+0

这工作得很好。我假设StandardError.ReadToEnd应该是空的,如果过程完成没有任何问题? – steventnorris

1

我想确切的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; 

不过说真的,你应该只添加一个引用到装配有问题,并直接调用它的方法。

1

参见example(向下滚动到例子)的信息,执行命令。您可以尝试更改UseShellExecute选项以获得接近的结果。