【发布时间】:2021-07-07 15:25:30
【问题描述】:
我正在 macOS 上使用 electron-builder 构建一个 Electron 应用程序。
在我的代码中,我像这样访问命令行参数:
const cmd = electron.remote.app.commandLine;
const val = cmd.hasSwitch('myArg')
? cmd.getSwitchValue('myArg')
: undefined;
在提供参数时,这适用于 macOS 上的生产构建:
./my-electron-app.app/Contents/MacOS/my-electron-app --myArg=foo
// or:
open my-electron-app.app --args -myArg=foo
但在 Windows 上我无法正常工作。
这是我尝试使用cmd.exe:
my-electron-app.exe --myArg=foo
my-electron-app.exe -myArg=foo
my-electron-app.exe /myArg=foo
my-electron-app.exe myArg=foo
当记录 electron.remote.process.argv[1] 时,我可以在 macOS 和 Windows 上看到传递的参数,但是 hasSwitch 和 getSwitchValue 不会给我这个值。
我做错了什么?或者有没有更好的方法让跨平台命令行参数正常工作?
【问题讨论】:
-
起初,这告诉我您可能传递了一个 URL/路径之类的参数,该参数在 Windows 中被剥离,并且会询问特定的参数(请参阅this issue),但我会预计 arg 也会从 process.argv 中删除..所以我想这是别的东西
-
我刚刚在我的 Windows 机器上尝试过,将
"-abc=foo"传递到 VSCode 的 launch.json "args" 属性中,app.commandLine.hasSwitch("abc")正确返回 true。我没有在任何地方使用电子生成器。不确定这是否相关。我没有从源代码运行我的应用程序的打包版本。 -
不是this,是吗?看起来很相似,但不确定为什么它会在 Mac 上工作
-
@pushkin 感谢您的评论。是的,我想传递一个路径作为参数 (
C:\...),但是 传递一个像foo这样的字符串也不起作用。我刚刚再次检查了my-electron-app.exe -myArg=foo将在electron.remote.process.argv中显示-myArg=foo。...我只是做了一些额外的调试,结果如下:hasSwitch('myArg)`返回false,getSwitchValue('myArg')返回""。我从上面尝试了所有 4 个版本:双/单破折号、斜杠、无前缀。
标签: windows electron command-line-arguments electron-builder