启动过程:ID为5344的进程未运行

时间:2012-07-23 21:12:18

标签: powershell

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

我无法弄清楚它是什么。有什么想法吗?

2 个答案:

答案 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