3
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

我不知道它是什么。有任何想法吗?

4

2 回答 2

3

合并 .reg 文件后,该参数不会/S导致 regedit 退出吗?我怀疑您遇到的错误是因为在 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()
于 2012-07-24T04:57:35.050 回答
0

如果进程已经退出,WaitForExit() 将抛出 SystemException。

我在一个循环使用 start-process 的 PS 脚本中随机得到了同样的东西。永远不会在同一迭代中,有时根本不会。这将完美地解释这种行为。线程和进程的随机异步计时。

我尝试了建议的错误消息转储,看起来它确认了进程在 WaitForExit() 看到它之前完成的想法:

Start-Process:无法处理请求,因为进程 (38152) 已退出。

$result = start-process <<<< -filepath $compiler -argumentlist $argstr -nonewwindow -passthru -wait CategoryInfo : NotSpecified: (:) [Start-Process], InvalidOperationException + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands .StartProcessCommand

于 2014-12-18T17:43:20.727 回答