有没有一种方法可以强制Firefox在新的进程中启动?

20

有没有命令行参数可以强制firefox.exe为特定URL启动一个新进程,而不管是否已经运行了另一个firefox实例?

5个回答

31
如果您有第二个配置文件(例如 'sidekick'),则以下内容将启动一个新的Firefox进程:
firefox.exe -no-remote -p sidekick

然而,如果该配置文件已被当前Firefox会话使用,则此方法无效。

若要创建新的配置文件,请在命令行中使用-P标志启动Firefox并创建它。

firefox.exe -P

在2020年10月,三年后,问题提出者ykaganovich评论中指出:

最近的Firefox版本(截至2020年)还可以通过about:profiles访问配置文件管理UI界面。


正确回答,只是想补充一下,更详细的解释可以在这里找到:http://www.callum-macdonald.com/about/faq/multiple-firefox-instances/ - kkara
我知道我之前问过关于命令行的问题,但为了完整起见,最近版本的Firefox(截至2020年)也提供了在about:profiles中可用的配置文件管理界面。 - ykaganovich
@ykaganovich 很好的观点。我已经将您的评论包含在答案中,以增加其可见性。 - VonC

2
我经常需要关闭多个实例、清除缓存和打开多个火狐窗口,在重建我的网络应用程序后测试我的更改。我使用Firefox便携版来允许多个实例。我已经编写了下面的批处理脚本,如果尚未修改,则修改FirefoxPortable安装,停止当前的firefox进程并重新启动它。我通常有四个实例运行不同的可执行文件名称。一个用于常规浏览,另外三个用于测试Web应用程序。当你想要测试和认证你的Web应用程序在当前和之前版本的Firefox中使用时非常有用。
我可能会在同一个浏览器中打开三个选项卡,但处理浏览器时,我倾向于偏执。我更喜欢为不同的应用程序清理并重新打开一个全新的浏览器实例,而不是F5或Ctrl F5。 该脚本将使用单独的进程名称和单独的配置文件运行单独的Firefox便携版进程。 希望这些对您有所帮助。请随意使用它们。请在此主题上发布您的修改和错误修复。
将FirefoxPortable安装到名为FirstFirefoxPortable(或其他适当的名称)的文件夹中。
REM ==============

setlocal

set URL=%1

REM FirefoxPortable installation folder
set FIREFOX_PORTABLE_HOME=C:\portables\FirstFirefoxPortable

REM Name of the FirefoxPortable executable file
set FIREFOX_FILENAME_NOEXT=FirstFirefoxPortable

REM Name of the Firefox executable file within App/firefox
set FIREFOX_EXEC_NOEXT=firstfirefox

set FIREFOX_PORTABLE_EXEC=%FIREFOX_PORTABLE_HOME%\%FIREFOX_FILENAME_NOEXT%.exe

REM Name of the other profile folder.
set FIREFOX_PROFILE=firstprofile

set CLEAR_HISTORY=true
set CLEAR_CACHE=true
set CLEAR_SAVED_PASSWORDS=true
set CLEAR_SESSION=true

set WAIT_DURATION=4
set ADDITIONAL_WAIT_DURATION=2

if not exist %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini (

@echo off
echo.
echo.
echo Setting up Firefox Profile
echo.
echo.
pause
@echo on

echo [FirefoxPortable]>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo FirefoxDirectory=App\firefox>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo ProfileDirectory=%FIREFOX_PROFILE%\profile>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo SettingsDirectory=%FIREFOX_PROFILE%\settings>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo PluginsDirectory=%FIREFOX_PROFILE%\plugins>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo FirefoxExecutable=%FIREFOX_EXEC_NOEXT%.exe>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo AdditionalParameters=>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo LocalHomepage=>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo DisableSplashScreen=false>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo AllowMultipleInstances=false>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo DisableIntelligentStart=false>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo SkipCompregFix=false>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini
echo RunLocally=false>>%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini

rem create dirs
pushd %FIREFOX_PORTABLE_HOME%
mkdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%
mkdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile
mkdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\settings
mkdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\plugins
popd

rem copy profile
xcopy /e %FIREFOX_PORTABLE_HOME%\App\DefaultData\profile %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile

copy /y %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%.ini %FIREFOX_PORTABLE_HOME%\FirefoxPortable.ini
rename %FIREFOX_PORTABLE_HOME%\FirefoxPortable.exe %FIREFOX_FILENAME_NOEXT%.exe
rename %FIREFOX_PORTABLE_HOME%\App\Firefox\firefox.exe %FIREFOX_EXEC_NOEXT%.exe
)

rem check if firefox is running
REM tasklist /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe" 2>NUL | find /I /N "%FIREFOX_FILENAME_NOEXT%.exe">NUL
REM if "%ERRORLEVEL%"=="0" (
REM echo Firefox running
REM taskkill /t /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
REM ping -n 4 127.0.0.1 > NUL
REM tasklist /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
REM echo retrying killing Firefox
REM taskkill /f /t /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
REM ping -n 2 127.0.0.1 > NUL
REM taskkill /f /t /FI "IMAGENAME eq %FIREFOX_EXEC_NOEXT%.exe"
REM ) else (
REM echo Firefox not running.. starting..
REM )


taskkill /t /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"

ping -n %WAIT_DURATION% 127.0.0.1 > NUL
echo ==== try killing
tasklist /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
tasklist /FI "IMAGENAME eq %FIREFOX_EXEC_NOEXT%.exe"
taskkill /t /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
taskkill /t /FI "IMAGENAME eq %FIREFOX_EXEC_NOEXT%.exe"

ping -n %ADDITIONAL_WAIT_DURATION% 127.0.0.1 > NUL
echo ==== retry killing forcefully 
tasklist /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
tasklist /FI "IMAGENAME eq %FIREFOX_EXEC_NOEXT%.exe"
taskkill /f /t /FI "IMAGENAME eq %FIREFOX_FILENAME_NOEXT%.exe"
taskkill /f /t /FI "IMAGENAME eq %FIREFOX_EXEC_NOEXT%.exe"


REM clear everything - delete profile
REM del /f /s /q %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\*
REM rmdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\
REM mkdir %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\

REM clear all sqlite files
rem for /d %%x in (%FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\*) do del /q /s /f %%x\*sqlite

if "%CLEAR_HISTORY%"=="true" (
echo.
echo Clearing History
echo.
rem clear history (Bookmarks, browsing and download history)
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\places.sqlite*

rem clear form history (Saved form data)
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\formhistory.sqlite*
)

if "%CLEAR_SESSION%"=="true" (
echo.
echo Clearing browsing session
echo.
rem clear previous browsing session
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\sessionstore.js
)

if "%CLEAR_SAVED_PASSWORDS%"=="true" (
echo.
echo Clearing saved passwords
echo.
rem clear saved passwords
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\logins.json
)

if "%CLEAR_CACHE%"=="true" (
echo.
echo Clearing cache
echo.
rem clear permissions (Permission database for cookies, pop-up blocking, image loading and add-ons installation.)
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\permissions.sqlite*

rem clear content preferences (Individual settings for pages.)
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\content-prefs.sqlite*

rem clear cookies
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\cookies.sqlite*

rem clear cache
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\cache2\*

rem clear offline cache
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\OfflineCache\*

rem clear DOM Storage
del /q /s /f %FIREFOX_PORTABLE_HOME%\%FIREFOX_PROFILE%\profile\webappsstore.sqlite*
)

if "%URL%"=="" (
set URL=www.google.com?q=DidYouPassTheURLArgument
)
@echo on
start /MAX "%FIREFOX_FILENAME_NOEXT%.exe" %FIREFOX_PORTABLE_EXEC% -P "%FIREFOX_PROFILE%" -no-remote -new-tab %URL%
endlocal

REM ==================

用于打开第二个应用程序的火狐浏览器的脚本。这与上面的脚本相同。

将其复制并保存到另一个文件中,例如 secondfirefox.bat。在另一个文件夹中安装 FirefoxPortable,例如 C:\portables\SecondFirefoxPortable。更改 secondfirefox.bat 中的变量以指向其他便携式 Firefox 安装文件夹。

setlocal

set URL=%1

REM FirefoxPortable installation folder
set FIREFOX_PORTABLE_HOME=C:\portables\SecondFirefoxPortable

REM Name of the FirefoxPortable executable file
set FIREFOX_FILENAME_NOEXT=SecondFirefoxPortable

REM Name of the Firefox executable file within App/firefox
set FIREFOX_EXEC_NOEXT=secondfirefox

set FIREFOX_PORTABLE_EXEC=%FIREFOX_PORTABLE_HOME%\%FIREFOX_FILENAME_NOEXT%.exe

REM Name of the other profile folder.
set FIREFOX_PROFILE=secondprofile

REM --- snip ---

---- 更新 ----

修复了错误 - 更正了个人资料路径。

分离出用于清除密码的变量。在我的网页应用程序的登录页面上记住密码。减少输入。

---- 更新 ---- 2014-10-01

不再需要手动重命名FirefoxPortable.exe文件。脚本会在FirefoxPortable安装的第一次运行时完成此操作。

---- 更新 ---- 2014-11-09

更改以允许通过运行FirefoxPortable安装程序进行更新。当此批处理程序要求您覆盖首选项和书签时,请键入N。这将保留书签和某些设置。


非常有用的脚本,肯定比我五年前的回答更详细。+1 - VonC
无意中点了下投票,但并没有意识到 - 只是在浏览。现在 Stack Overflow 不让我清除它。很糟糕。唉。 - Jester

2

是的,如Firefox 命令行参数中详细说明的:

firefox -new-window

编辑:重新阅读了您所说的“进程”,在这种情况下,我认为是不可能的。


我认为他的意思是完全独立的进程...也就是说 - 任务列表将报告两个运行的firefox.exe实例。 - Grant Wagner
我刚刚发现了:/ 好吧,现在是星期五晚上(这就是我的借口) - Greg

0

启动新进程(实例)的方法是

-new-instance
Open new instance, not a new window in running instance, which allows multiple copies of application to be open at a time.

firefox -new-instance -P "Another Profile"

Note: Not available for Windows, see bug 855899.


0

如果你使用的是Mac电脑,你可以使用以下命令每次打开一个新的实例并创建一个全新的空白配置文件:

open -n -a Firefox.app --args -profile `mktemp  -d /tmp/fx-profile.XXXX` -no-remote -new-instance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接