PS C:\> start regedit -ArgumentList '/S', 'D:\resources\hawk_config.reg' -Wait
Start-Process : Process with an Id of 5344 is not running.
At line:1 char:6
+ start <<<< regedit -ArgumentList '/S', 'D:\resources\hawk_config.reg'
+ CategoryInfo : NotSpecified: (:) [Start-Process], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.StartProcessCommand
我无法弄清楚它是什么。有什么想法吗?
答案 0 :(得分:3)
/S
参数是否会导致regedit在合并.reg文件后立即退出?我怀疑你得到的错误是因为在Start-Process有机会在进程对象上调用Process.WaitForExit()之前,regedit已经退出。通过在命令后面运行$error[0] | Format-List *
来查看错误的大小。如果进程已退出,WaitForExit()
将抛出SystemException
。我无法在PowerShell v3上重现这一点。也许他们修复了这个cmdlet的问题。
作为解决方法,您可以尝试:
$p = start-process regedit -ArgumentList '/S', 'D:\resources\hawk_config.reg' -passthru
$p.WaitForExit()
答案 1 :(得分:0)
WaitForExit()将抛出SystemException。
我在一个在循环中使用start-process的PS脚本中随机获得同样的东西。从来没有在同一个迭代,有时从来没有。这可以完美地解释这种行为。线程和进程的随机异步计时。
我尝试了建议的错误消息转储,看起来它确认了在WaitForExit()看到它之前进程正在完成的想法:
Start-Process:无法处理请求,因为进程(38152)已退出。
$ result = start-process&lt;&lt;&lt;&lt; -filepath $ compiler -argumentlist $ argstr -nonewwindow -passthru -wait CategoryInfo:NotSpecified :( :) [Start-Process],InvalidOperationException + FullyQualifiedErrorId:System.InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand