退出后,Windows 错误代码为 0,并在 NodeJS 中出现错误

Windows error code is 0 after exiting with error in NodeJS

提问人:Jacob Wartofsky 提问时间:9/11/2023 更新时间:9/11/2023 访问量:20

问:

我正在使用 Node 测试一个在 MacOS 和 Windows 上运行的应用程序。

如果我的程序退出时出现错误,则退出代码是在 MacOS 上设置的,而不是在 Windows 上设置的。在 PowerShell 中运行错误命令 $((0/0)) 并且没有找到 $LASTEXITCODE 或 $?已填充。我得到 $LASTEXITCODE=0 和 $?=True。除非在代码中明确设置,否则 Windows 是否只吞下退出代码?在 MacOS 上的“终端”中,退出代码设置为 1。

我应该在 Windows 上寻找不同的退出代码吗?

下面是触发此行为的测试的代码示例:

describe("runSubprocess", () => {
  it("returns non-zero when subprocess fails", async () => {
    const exitCode = await runSubprocess("echo", ["$((0/0))"]);
    expect(exitCode).not.toEqual(0);
  });
});

function runSubProcess(command: string, args: ReadonlyArray<string>) {
  process.stdout.write("> " + command + " " + args.join(" ") + "\n");
  const childProcess = spawn(command, args, {
    stdio: ["inherit", "pipe", "pipe"],
    shell: true,
  });
  return new Promise((resolveFunc) => {
    childProcess.stdout.on("data", (x) => {
      process.stdout.write(x.toString());
    });
    childProcess.stderr.on("data", (x) => {
      process.stderr.write(x.toString());
    });
    childProcess.on("exit", (code) => {
      resolveFunc(code);
    });
  });
}

已尝试在MacOS和Windows上运行此测试。它在 MacOS 上按预期工作。

我还尝试在 PowerShell 和终端中运行该命令。发生相同的行为。

节点 .js 窗口 退出

评论

0赞 Mahobo 9/12/2023
在 Windows 中,尝试在退出程序后检查 %errorlevel%。也许这会有所帮助

答: 暂无答案