Я сталкиваюсь с очень странной проблемой, когда у меня есть скрипт Node, который вызывает процесс, он выглядит следующим образом:
// wslPath declared here (it's a shell file)
const proc = cp.spawn('ubuntu.exe', ['run', wslPath]);
let stdout = '';
proc.stdout.on('data', data => stdout += data.toString());
let stderr = '';
proc.stderr.on('data', data => stderr += data.toString());
return await new Promise((resolve, reject) => {
proc.on('exit', async code => {
await fs.remove(winPath);
if (code) {
reject({ code, stdout, stderr });
}
resolve({ stdout, stderr });
});
});
Как вы можете видеть, скрипт вызывает WSL. WSL включен на компьютере. Когда я запускаю этот скрипт вручную, он работает нормально. Когда я захожу на компьютер, скрипт использует RDP с другого компьютера и запускает его с теми же учетными данными, он также работает нормально. Но когда скрипт вызывается из запланированной задачи, которая также выполняется с теми же учетными данными, вызов spawn
возвращает:
(node:4684) UnhandledPromiseRejectionWarning: Error: spawn UNKNOWN
at ChildProcess.spawn (internal/child_process.js:394:11)
at Object.spawn (child_process.js:540:9)
Я проверил, что пользователь такой же, войдя в систему require('os').userInfo()
и require('child_process').spawnSync('whoami', { encoding: 'utf8' })
, и он возвращает то же самое во всех трех случаях.
Я предполагаю, что это потому, что ubuntu.exe
не найдено, но я не знаю, почему это будет, поскольку пользователь является то же самое во всех трех случаях.
В чем может быть причина этого и как я могу отладить это дальше?