0

我正在尝试从 TeamCity PowerShell 构建步骤远程启动 NodeJS 包。

目前,启动该过程的部分如下所示:

$npm = "C:\Program Files\nodejs\node.exe"
$params = $pathToStart

$proc = Start-Process -FilePath $npm -ArgumentList $params -Passthru
$proc | Export-Clixml -Path $fullProcessHandlePath

$pathToStart 确实保存了我的包入口点的路径。当我使用 -Wait 运行它时,有效地导致我的 PS 脚本永远不会结束,我可以看到节点包已启动并且正在正确执行。但是,如果我让脚本运行到

$proc | Export-Clixml -Path $fullProcessHandlePath

并退出,我的节点进程也被终止。

我需要调用 Export-Clixml 来保存新创建的进程句柄信息,以便以后可以从另一个脚本中销毁它。

如何保留 Export-Clixml,但从 ps 脚本中分离并让 node.exe 继续工作?

4

2 回答 2

1

我最终使用node-windows包来让 node.js 代码为我的应用程序创建一个 Windows 服务。我知道这是一种不同的事情,我不会将其标记为答案,尽管知道即使使用 Start-Job 也无法让 node.exe 保持活力,这可能会节省某人的时间并带来更可靠的解决方案。

于 2015-08-16T14:08:22.477 回答
0

我建议使用 Start-Job cmdlet 而不是 Start-Process,因为它允许您将 PowerShell 控制台与命令运行分离。

$npm = "C:\Program Files\nodejs\node.exe"
$params = $pathToStart

Start-Job -FilePath $npm -ArgumentList $params

至于提取进程信息,我能想到的最好的方法是通过按时间排序运行获取最新的节点进程,这将与进程启动的毫秒一样精细。

Get-Process notepad | Sort-Object starttime | Select-Object -Last 1 | Export-Clixml -Path $fullProcessHandlePath
于 2015-08-14T22:28:23.470 回答