简体   繁体   English

通过命令提示符静默更新 Firefox (Windows)

[英]Silently Updating Firefox via Command Prompt (Windows)

I have a batch file which silently installs Firefox and this works fine.我有一个批处理文件,它会静默安装Firefox并且工作正常。 (I add -ms to the line where I execute the installation file.) (我将-ms添加到执行安装文件的行。)

Now I want to update Firefox in the same batch file only if it's not the newest Version.现在我只想在同一个批处理文件中更新 Firefox,前提是它不是最新版本。 The version test is already in the batch file and is working fine.版本测试已经在批处理文件中并且工作正常。

And now my Question is: How can I silently update Firefox?现在我的问题是:如何静默更新 Firefox?

I already tried the steps from this link but they are not working, no errors just doing nothing.我已经尝试过此链接中的步骤,但它们不起作用,没有错误,只是什么都不做。 Is there maybe another possibility?也许还有另一种可能性?

Edit:编辑:

This is the code of my batch file.这是我的批处理文件的代码。
The line if %errorlevel%==1 %INSTALLDIR%\Mozilla Firefox\updater.exe -ms needs to be replaced with the silent update for Firefox (which is hopefully working).该行if %errorlevel%==1 %INSTALLDIR%\Mozilla Firefox\updater.exe -ms需要替换为Firefox的静默更新(希望可以正常工作)。

@echo off

IF %PROCESSOR_ARCHITECTURE%==x86 SET INSTALLDIR=%ProgramFiles%
IF %PROCESSOR_ARCHITECTURE%==AMD64 SET INSTALLDIR=%ProgramFiles(x86)%

IF NOT EXIST "%INSTALLDIR%\Mozilla Firefox\firefox.exe" goto install

REM Update Firefox if the Version is not 37.0
:update
CD %INSTALLDIR%\Mozilla Firefox\
firefox -v | more | find /i "37"
if %errorlevel%==0 goto end
if %errorlevel%==1 %INSTALLDIR%\Mozilla Firefox\updater.exe -ms
goto end

REM Install Firefox if it's not installed yet
:install
\\***\***\Firefox-Setup-37.exe -ms

I suggest for this task the following commented batch code:我建议为此任务使用以下注释批处理代码:

@echo off
set "FirefoxFolder="
set "FirefoxVersion=37"

rem Get path of installed Firefox directly from Windows registry.
for /F "skip=2 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" /v Path 2^>nul') do (
    if /I "%%I" == "Path" (
        set "FirefoxFolder=%%K"
        if defined FirefoxFolder goto CheckFirefox
    )
)

:InstallFirefox
echo Installing Firefox ...

:UpdateFireFox
\\***\***\Firefox-Setup-%FirefoxVersion%.exe -ms
goto :EOF

:CheckFirefox
if not exist "%FirefoxFolder%\firefox.exe" goto InstallFirefox

rem Check if version of Mozilla Firefox starts with defined number.
rem The space at beginning makes sure to find the major version number.
"%FirefoxFolder%\firefox.exe" -v | %SystemRoot%\System32\more | %SystemRoot%\System32\find.exe " %FirefoxVersion%" >nul
if errorlevel 1 (
    echo Updating Firefox to version %FirefoxVersion% ...
    goto UpdateFireFox
)

echo Firefox with version %FirefoxVersion% is already installed.

The path to Firefox executable is read directly from Windows registry. Firefox可执行文件的路径直接从 Windows 注册表中读取。 This should work on any Windows, even on Windows XP.这应该适用于任何 Windows,甚至在 Windows XP 上。

I have read that for updating Firefox just the installer must be executed.我已经读到更新Firefox只需要执行安装程序。 The installer automatically detects an already installed version of Firefox and updates it without changing the user settings.安装程序会自动检测已安装的Firefox版本并更新它,而无需更改用户设置。

I liked Mofi's code so much I went ahead and transformed it into a fully unattended installer, using curl and powershell.我非常喜欢 Mofi 的代码,我继续使用 curl 和 powershell 将其转换为完全无人值守的安装程序。 Thank you Mofi!谢谢莫菲! Run this code and you will have the latest firefox version whether firefox is already installed or not!运行此代码,无论是否已安装 Firefox,您都将拥有最新的 Firefox 版本!

@echo off
set "FirefoxFolder="
Title Firefox Updater
curl --silent -o "%TEMP%\firefoxdl.txt" "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=en-US"
powershell -command "(Get-Content "%TEMP%\firefoxdl.txt") | ForEach-Object { $_ -replace '^.*releases.([0-9][0-9]).*$','$1' } | Set-Content "%TEMP%\firefoxdl.txt""
set /p FirefoxVersion=<"%TEMP%\firefoxdl.txt"
del "%TEMP%\firefoxdl.txt"
Echo The Latest Release of Firefox is version %FirefoxVersion%.

rem Get path of installed Firefox directly from Windows registry.
for /F "skip=2 tokens=1,2*" %%A in ('%SystemRoot%\System32\reg.exe query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" /v Path 2^>nul') do (
    if /I "%%A" == "Path" (
        set "FirefoxFolder=%%C"
        if defined FirefoxFolder goto CheckFirefox
    )
)

:InstallFirefox

:UpdateFireFox
Echo Downloading Firefox Version %FirefoxVersion%...
curl --silent -L -o "%TEMP%\firefoxcurrent.exe" "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=en-US"
Echo Installing Firefox Version %FirefoxVersion%, please wait...
tasklist /fi "imagename eq firefox.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "firefox.exe" >nul 2>&1
start "" /wait "%TEMP%\firefoxcurrent.exe" -ms
Echo Cleaning Up!
del "%TEMP%\firefoxcurrent.exe"
goto :EOF

:CheckFirefox
if not exist "%FirefoxFolder%\firefox.exe" goto InstallFirefox

rem Check if version of Mozilla Firefox starts with defined number.
rem The space at beginning makes sure to find the major version number.
"%FirefoxFolder%\firefox.exe" -v | %SystemRoot%\System32\more | %SystemRoot%\System32\find.exe " %FirefoxVersion%" >nul
if errorlevel 1 (
    echo Updating Firefox to version %FirefoxVersion% ...
    goto UpdateFireFox
)

echo However, Firefox version %FirefoxVersion% is already installed.

If you are running Chocolately:如果你运行 Chocolately:

choco upgrade firefox -y

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM