System.Diagnostics.ProcessStartInfo зависает, если аргументы содержат метку тильды - PullRequest
0 голосов
/ 16 мая 2019

Команда git git reset HEAD~ отменит последний коммит. Но когда я пытаюсь запустить команду в PowerShell, используя System.Diagnostics.ProcessStartInfo, процесс просто зависает.

Я думаю, что это как-то связано со знаком тильды (~), потому что я пытался избежать его с помощью обратной косой черты, а команда больше не зависала. Но это тоже не сработало. Это просто молча провалилось.

Вот сценарий:

$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()

1 Ответ

0 голосов
/ 16 мая 2019

Передача аргументов в виде списка, кажется, исправляет это:

$pinfo.Arguments = "reset","HEAD~"

Я предполагаю, что с этим методом происходит еще несколько автоматических экранирований.

...