Angularjs 生成命令在electron应用程序中不起作用

Angularjs 生成命令在electron应用程序中不起作用,angularjs,node.js,electron,spawn,Angularjs,Node.js,Electron,Spawn,我试图在Electron中使用AngularJS使用spawn运行一个命令,我得到了一个错误 events.js:183 Uncaught Error: spawn dita ENOENT at _errnoException (util.js:1024) at Process.ChildProcess._handle.onexit (internal/child_process.js:190) at onErrorNT (internal/child_process.j

我试图在Electron中使用AngularJS使用spawn运行一个命令,我得到了一个错误

events.js:183 Uncaught Error: spawn dita ENOENT
    at _errnoException (util.js:1024)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190)
    at onErrorNT (internal/child_process.js:372)
    at _combinedTickCallback (internal/process/next_tick.js:138)
    at process._tickCallback (internal/process/next_tick.js:180)
_errnoException @ util.js:1024
ChildProcess._handle.onexit @ internal/child_process.js:190
onErrorNT @ internal/child_process.js:372
_combinedTickCallback @ internal/process/next_tick.js:138
_tickCallback @ internal/process/next_tick.js:180
这是我的生成命令:-

spawn('dita', 
            ['--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
            {
              cwd: $scope.ditaPath + "\\bin"
            }, function(error, stdout, stderr) {
              // work with result
              console.log(stdout);
              console.log(stderr);
              console.log(error);
            });
当我手动运行相同的批处理代码时,它工作正常。
这个错误是什么?我无法获取此信息。

使用spawn创建进程与在命令提示符下运行进程不同,您可以传递可执行文件的绝对路径,如

spawn('/full/path/to/dita',
    ['--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
    {
        cwd: $scope.ditaPath + "\\bin"
    }, function (error, stdout, stderr) {
        // work with result
        console.log(stdout);
        console.log(stderr);
        console.log(error);
    }
);
或者,如果要模拟命令提示符

spawn('cmd.exe',
    ['dita', '--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
    {
        cwd: $scope.ditaPath + "\\bin"
    }, function (error, stdout, stderr) {
        // work with result
        console.log(stdout);
        console.log(stderr);
        console.log(error);
    }
);

这两种解决方案都应该可行,但在您的场景中,我想第二种可能很容易实现。

手动运行它是什么意思?@JanithKasun的意思是在命令提示符下运行命令。ie
dita--input=C:\Users\aaa\Desktop\ditamaps\mobile\mobilePhone.ditamap--output=C:\Users\aaa\Desktop--format=pdf
正在运行。虽然
cmd.exe
抛出了错误,但不知道为什么,但当我将其更改为
dita.bat
时,它工作了。谢谢你的帮助。