javascript 使用node.js生成.lnk窗口快捷方式时出现“UNKNOWN”错误

fquxozlt  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(208)

我有一个游戏作为一个子进程衍生。它与游戏的原始.exe文件一起工作得很好。但是,我希望它以最小化的方式执行,而我能告诉它的唯一方法是创建一个windows快捷方式(.lnk文件,在同一目录中),并将启动选项设置为最小化。Node.js不喜欢这样:

internal/child_process.js:313
    throw errnoException(err, 'spawn');
    ^

Error: spawn UNKNOWN
    at exports._errnoException (util.js:1026:11)
    at ChildProcess.spawn (internal/child_process.js:313:11)
    at exports.spawn (child_process.js:380:9)
    at ExecDom4Server (D:\Google Drive\Clockwork Hounds stuff\MrClockworkBot\v10
\MrClockworkBot.js:568:42)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)

游戏本身有一些关于图形设置的参数,但也没有最小化的启动参数。下面是具体的代码:

function execDom4Server(name, args)
{
    var spawn = require('child_process').spawn;
    childrenProcesses[name.toLowerCase()] = spawn(dom4root + "dom4.exe.lnk", args);
    updateDom4Games();
}

我到处找这个问题,但我想它是相当具体的。我不知道这是否只是node.js无法处理.lnk文件。如果你能给予我任何指示,我将不胜感激!

2exbekwf

2exbekwf1#

如果您使用spawn()的shell选项,这应该可以工作

spawn('application.lnk', args, { shell: true })
5gfr0r5j

5gfr0r5j2#

另一个可能的问题:我还没有测试它是否是.lnk和.bat文件所独有的,但是即使使用{shell:true},如果你试图启动文件的完整路径,子进程的生成似乎也会立即退出,代码为1。

const child_process = require('child_process');
    let child = child_process.spawn('path/to/shortcut.bat');

相反,看起来您只需要 * 运行 * 快捷方式的最终文件名,但将cwd * 选项 * 设置为它所在的路径:

const child_process = require('child_process');
    let child = child_process.spawn('shortcut.bat', [], {cwd:'path/to'});

如果您使用的是实际的.lnk(tl;dr:我的实验最初引导我使用fs将.lnk文件写入相应的.bat文件,这是一个完全可行的选项,用于进一步定制进程启动),那么您仍然需要{shell:true}来避免,至少在我目前的情况下,errno:-4094code:'UNKNOWN'syscall: 'spawn'错误。

const child_process = require('child_process');
    let child = child_process.spawn('shortcut.lnk', [], {cwd:'path/to', shell:true});

相关问题