System.Diagnostics.ProcessStartInfo 如果参数包含波浪号则挂起
System.Diagnostics.ProcessStartInfo hangs if the arguments include a tilde mark
git 命令 git reset HEAD~
将撤消最后一次提交。但是,当我尝试使用 System.Diagnostics.ProcessStartInfo
在 PowerShell 中 运行 命令时,进程挂起。
我认为它与波浪号 (~
) 标记有关,因为我试图用反斜杠将其转义并且命令不再挂起。但它也没有用。它只是默默地失败了。
这是脚本:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "C:\Program Files\Git\cmd\git.exe"
$pinfo.Arguments = "reset HEAD~"
$pinfo.WorkingDirectory = "C:\GitRepo"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.CreateNoWindow = $true
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
将参数作为列表传递似乎可以解决问题:
$pinfo.Arguments = "reset","HEAD~"
我想这个方法还有一些自动转义。
git 命令 git reset HEAD~
将撤消最后一次提交。但是,当我尝试使用 System.Diagnostics.ProcessStartInfo
在 PowerShell 中 运行 命令时,进程挂起。
我认为它与波浪号 (~
) 标记有关,因为我试图用反斜杠将其转义并且命令不再挂起。但它也没有用。它只是默默地失败了。
这是脚本:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "C:\Program Files\Git\cmd\git.exe"
$pinfo.Arguments = "reset HEAD~"
$pinfo.WorkingDirectory = "C:\GitRepo"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.CreateNoWindow = $true
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
将参数作为列表传递似乎可以解决问题:
$pinfo.Arguments = "reset","HEAD~"
我想这个方法还有一些自动转义。