如何使用 JSON 字符串中给定的参数启动 Firefox?

How to start Firefox with given arguments in JSON string?

背景


我使用 VS Code 的 Live Server 扩展,我试图让它用特定的配置文件打开 Firefox。

问题


我不知道如何以 JSON 格式指定命令行参数,或者不可能。

目前,我的 settings.json 包含这一行。

"liveServer.settings.AdvanceCustomBrowserCmdLine": "'C:\Program Files\Firefox Nightly\firefox.exe' -P webdev"

这会导致以下错误。

到目前为止我尝试了什么


我通过 运行直接从命令行执行相同的命令来进行健全性检查。事实证明我不能在字符串中包含参数。

这个在cmd中工作:

C:\Users>"C:\Program Files\Firefox Nightly\firefox.exe -P webdev"

它导致我之前看到的相同错误。

'"C:\Program Files\Firefox Nightly\firefox.exe -P webdev"' is not recognized as an internal or external command, operable program or batch file.

然而,这非常有效:

C:\Users>"C:\Program Files\Firefox Nightly\firefox.exe" -P webdev

要传递参数 -P webdev 我必须在 firefox.exe 所在的目录中并且通过调用它的名称 运行 它,或者将参数放在结束引号之后.

我尝试在 JSON 中指定的所有方法都不起作用:

"liveServer.settings.AdvanceCustomBrowserCmdLine": "C:\Program Files\Firefox Nightly\firefox.exe -P webdev"

"liveServer.settings.AdvanceCustomBrowserCmdLine": "C:\Program Files\Firefox Nightly\firefox.exe /P webdev"

"liveServer.settings.AdvanceCustomBrowserCmdLine": "\"%ProgramFiles%\Firefox Nightly\firefox.exe\" -P webdev"

"liveServer.settings.AdvanceCustomBrowserCmdLine": "\"C:\Program Files\Firefox Nightly\firefox.exe\" -P webdev"

"liveServer.settings.AdvanceCustomBrowserCmdLine": "'%ProgramFiles%\Firefox Nightly\firefox.exe' -P webdev"

"liveServer.settings.AdvanceCustomBrowserCmdLine": "'C:\Program Files\Firefox Nightly\firefox.exe' -P webdev"

有效的例子:

"liveServer.settings.AdvanceCustomBrowserCmdLine": "C:\Program Files\Firefox Nightly\firefox.exe"

这个简单明了,没有争论。

"liveServer.settings.AdvanceCustomBrowserCmdLine": "C:\Program Files\Firefox Nightly\firefox.exe --private-window"

这个例子在扩展文档中给出。我不确定为什么这个甚至有效?如果参数必须放在引号之外,那么这应该不起作用。但这是单个参数,而 -P webdev 由两个参数组成(由 space 分隔)。

您可以转义内引号,但不能转义外引号,这是 JSON 字符串成为有效 JSON 字符串所必需的。

因此,如果您正在修改 JSON 格式的配置文件,并且您需要指定程序的绝对路径,该程序要求您将其包含在内部引号集中以便将参数传递给程序,那么您将不得不寻找替代解决方案。

CMD 中的这一行...

"C:\Program Files\Firefox Nightly\firefox.exe" -P webdev

应该在 JSON 配置文件中像这样编码以获得相同的结果(从 firefox.exe 使用名为 webdev 的配置文件开始)...

""C:\Program Files\Firefox Nightly\firefox.exe" -P webdev"

但这是无效的 JSON 字符串,因此这将不起作用(或者它会出现意外行为,例如被其他设置自动覆盖)。

而且您无法转义外引号集,因为您需要将所有内容都用引号引起来...

\""C:\Program Files\Firefox Nightly\firefox.exe" -P webdev\"

所以这个也是无效的

所以你需要想出一种不同的方法来指向程序而不使用引号并将参数传递给它,然后在 JSON 字符串中使用它。

一种方法是使用包含以下行的批处理文件 (C:\Users\Me\Desktop\test.bat)。

"%ProgramFiles%\Firefox Nightly\firefox.exe" -P webdev %*

然后你将 JSON 指向这里。

"liveServer.settings.AdvanceCustomBrowserCmdLine": "C:\Users\Me\Desktop\test.bat"