gpt4 book ai didi

java - 使用空格在 Java 中创建新的 Firefox 配置文件?

转载 作者:行者123 更新时间:2023-12-04 03:37:30 25 4
gpt4 key购买 nike

我可以使用以下命令在自定义目录中轻松创建新的 Firefox 配置文件:

    String profileName = "ABC XYZ";
Runtime rt = Runtime.getRuntime();

String dir = "C:\\My Custom Dir\\profileName";


String executeCommand = "cmd.exe /c start firefox -CreateProfile \"" + profileName.replaceAll("\s", "_") + " " + customFirefoxProfileDir + "\"";

Process process = rt.exec(executeCommand);

我遇到的问题是,如果我不将 profileName 中的空格替换为下划线(或其他一些字符),将仅使用 中的第一个单词生成配置文件code>profileName(即,ABC 而不是 ABC XYZ)。

经过一段时间的研究,我相信这种奇怪的现象源于以下事实:Firefox does not allow spaces in the Profile Name .

-CreateProfile profile_name

Create a new profile in the default directory, but do not start theapplication. The profile will be named profile_name in the profilemanager, the profile_name must not contain spaces().

虽然我总是可以自动用下划线替换空格,但问题是我无法强制执行此约定,因为某些配置文件是通过“选择用户配置文件”对话框手动创建的,带有空格。

奇怪的是,当点击 Create Profile 时在 Firefox - 选择用户配置文件对话框中,我可以随意命名 - 包括带空格

所以我的问题是:有没有办法以编程方式(在 Java 中)创建新的 Firefox 配置文件,同时在实际配置文件名称中包含空格?

我尝试用双引号将 profileName 括起来,但没有用。

最佳答案

顺便说一句这是 21 年(!)的旧错误条目,解释了为什么这是不可能的:https://bugzilla.mozilla.org/show_bug.cgi?id=51509

但也许您可以从这个问题的已接受答案中了解更多信息?

Programmatically create Firefox profiles

在任何情况下,我都建议对 runtime.exec 使用替代方法,该方法采用数组以避免弄乱额外的引号:

rt.exec(new String[] {"mkdir", "C:\\my test"});

并且有疑问地使用 sysinternals procmon 观察屏幕背后真正发生的事情。

还可以考虑动态组合 .bat.cmd 或类似的脚本文件,您可以从 Java 执行这些文件并且更易于编写和调试。 createprofile.cmd 文件示例:

@echo off
REM Put REM before the first line if you want to debug this script

IF "%~1"=="" ( echo please pass two arguments: the profile name and directory && goto END )
IF "%~2"=="" ( echo please pass two arguments, the profile name and directory && goto END )

REM Use %~1 instead of %1 to get rid of the double quotes of the invocation
set "FF_PROFILE_NAME=%~1"
set "FF_PROFILE_DIR=%~2"

IF exist "%FF_PROFILE_DIR%" ( echo directory already exists ) ELSE ( mkdir "%FF_PROFILE_DIR%" || exit %ERRORLEVEL%)

REM See: http://kb.mozillazine.org/Profiles.ini_file
set "PROFILE_CONFIG=%APPDATA%\Mozilla\Firefox\profiles.ini"

REM Let's make a backup first
copy "%PROFILE_CONFIG%" "%PROFILE_CONFIG%.bak-%RANDOM%%RANDOM%" >NUL

REM Find the highest profile number
REM TODO: Performance, stop looking if we found the highest profilenumber
REM TODO: Stop with error if we reach the highest profile number that we check for
FOR /L %%G IN (0,1,99) DO (findstr "\[Profile%%G\]" "%APPDATA%\Mozilla\Firefox\profiles.ini" >NUL && set "LAST_PROFILE=%%G")

SET /a NEXT_PROFILE=%LAST_PROFILE%+1

REM Write the new configuration section the ini file, appending it to the end:
ECHO.>> %PROFILE_CONFIG%
ECHO [Profile%NEXT_PROFILE%]>> %PROFILE_CONFIG%
ECHO Name=%FF_PROFILE_NAME%>> %PROFILE_CONFIG%
REM Escape with caret ^ the meaning of file descriptor numbers
ECHO IsRelative=^0>> %PROFILE_CONFIG%
ECHO Path=%FF_PROFILE_DIR%>> %PROFILE_CONFIG%
ECHO.>> %PROFILE_CONFIG%

:END

关于java - 使用空格在 Java 中创建新的 Firefox 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66627167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com