【发布时间】:2022-02-02 09:58:24
【问题描述】:
当我将 OpenSSH SCP Executable 与 System.Diagnostics.Process 一起使用时,不以某种方式重定向标准输出
我正在使用托管的 Windows PC,并且必须将文件发送到仅受密码保护的 SFTP 服务器。由于我无法安装任何其他程序或库,因此我无法使用没有密码参数的 Windows 默认 OpenSSH 客户端。 PC 位于无法访问 Internet 的企业防火墙后面。但这就是我所坚持的。
我的方法是使用System.Diagnostics.Process 启动SCP 命令,监听密码提示,然后使用System.IO.StreamWriter 发送。
虽然这似乎确实适用于我听了ipconfig 并随后发送输入的测试用例,但我正在努力处理scp、sftp 和其他程序,因为 DefaultOutput 似乎没有被重定向。
简化代码:
Private Dim Output = ""
Public Function CreateAndStartProcess(FileName As String, Optional Arguments As String = "")
Dim targetProcess As New Process()
targetProcess.StartInfo.FileName = FileName
targetProcess.StartInfo.Arguments = Arguments
targetProcess.StartInfo.UseShellExecute = False
targetProcess.StartInfo.RedirectStandardInput = True
targetProcess.StartInfo.RedirectStandardOutput = True
targetProcess.StartInfo.CreateNoWindow = False
targetProcess.Start()
AddHandler targetProcess.OutputDataReceived, OutputHandler
return targetProcess
End Function
Sub OutputHandler(sender, e, process) //never gets called
If String.IsNullOrEmpty(e.Data) Then
Exit Sub
End If
Output = Output & Environment.NewLine & e.Data
End Sub
Dim targetProcess = CreateAndStartProcess("C:\\Windows\\Sysnative\\OpenSSH\\scp.exe", "C:\test.txt user@host:/test")
System.Threading.Thread.Sleep(2000) //just for simplification
Dim SW As System.IO.StreamWriter = targetProcess.StandardInput
SW.WriteLine("password")
当我在OutputHandler 中设置断点时,它永远不会被调用。执行后Output 字符串为空
我有什么遗漏吗?使用 ipconfig 时效果很好。
【问题讨论】:
标签: vb.net scp system.diagnostics