问题描述
const { spawn } = require('child_process')
const spawnoptions = { detached: true,stdio: 'ignore' }
const pwshProcess = spawn('pwsh.exe',[
'-nop','-nol','-c','Set-Content -Path "D:\\outTest.txt" -Value "ok" -NoNewline'
],spawnoptions)
pwshProcess.unref()
process.exit()
文件D:\outTest.txt
将不会创建。
如何使代码正常工作?
解决方法
这是我可以在Windows上运行它的唯一方法,但是生成的过程并未分离。我尝试处理pwsh.exe的路径,进程的工作目录以及不同的参数组合。
const { spawn } = require('child_process')
const pwshProcess = spawn('pwsh.exe',[
'-nop','-nol','-c','Set-Content -Path "./outTest.txt" -Value "ok" -NoNewline -Verbose;'
])
pwshProcess.stdout.on('data',(data) => {
console.log(data.toString());
});
pwshProcess.stderr.on('data',(data) => {
console.error(data.toString());
});
pwshProcess.on('exit',(code) => {
console.log(`Child exited with code ${code}`);
});
// pwshProcess.unref()
// process.exit()
在Linux(Ubuntu)上按预期方式产生一个独立的pwsh
进程:
const { spawn } = require
('child_process')
const spawnOptions = { detached: true,stdio: 'ignore' }
const pwshProcess = spawn('pwsh',[
'-nop','Set-Content -Path "outTest.txt" -Value "ok" -NoNewline -Verbose;'
],spawnOptions)
pwshProcess.unref()
process.exit()
,
经过数小时的测试。我发现一种解决方案是使用Windows Shell start
命令创建一个新的可分离过程。
const { spawn,exec } = require('child_process')
const startPwshWindow = 'pwsh -nop -nol -noe'
const startPwshHidden = '/b pwsh -nop -nol -c Set-Content -Path ./outTest.txt -Value ok -NoNewline'
// using '/b' switch to create "no" new window
spawn('start',[startPwshWindow],{shell: true}).on('exit',process.exit)
exec(`start ${startPwshWindow}`).on('exit',process.exit)
spawn('start',[startPwshHidden],process.exit)
exec(`start ${startPwshHidden}`).on('exit',process.exit)