fix batch installer and split back into installer and uninstaller

This commit is contained in:
zeffy
2017-10-07 03:29:03 -07:00
parent c800704d32
commit cec5a91f60
4 changed files with 93 additions and 123 deletions

View File

@@ -1,5 +1,4 @@
@echo off
title wufuc installer
:: Copyright (C) 2017 zeffy
:: This program is free software: you can redistribute it and/or modify
@@ -15,9 +14,6 @@ title wufuc installer
:: You should have received a copy of the GNU General Public License
:: along with this program. If not, see <http://www.gnu.org/licenses/>.
call :set_uninstall 0
call :set_unattended 0
call :set_norestart 0
echo Copyright ^(C^) 2017 zeffy
echo This program comes with ABSOLUTELY NO WARRANTY.
@@ -25,34 +21,47 @@ echo This is free software, and you are welcome to redistribute it
echo under certain conditions; see COPYING.txt for details.
echo.
fltmc >nul 2>&1 || (
echo This batch script requires administrator privileges. Right-click on
echo %~nx0 and select "Run as administrator".
goto :die
)
call :set_uninstall 0
call :set_unattended 0
call :set_norestart 0
:loop_args
if [%1]==[] goto :check_requirements
if /I "%1"=="/UNATTENDED" call :set_unattended 1
if [%1]==[] goto :check_admin
if /I "%1"=="/UNINSTALL" call :set_uninstall 1
if /I "%1"=="/UNATTENDED" call :set_unattended 1
if /I "%1"=="/NORESTART" call :set_norestart 1
shift
shift /1
goto :loop_args
:set_uninstall
set "UNINSTALL=%~1"
exit /b
:set_unattended
set "UNATTENDED=%~1"
exit /b
:set_norestart
set "NORESTART=%~1"
exit /b
:check_admin
fltmc >nul 2>&1 || (
echo This batch script requires administrator privileges. Right-click on
echo the script and select "Run as administrator".
goto :die
)
:check_requirements
echo Checking system requirements...
set "systemfolder=%systemroot%\System32"
if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
goto :is_x64
goto :is_x64
) else (
if /I "%PROCESSOR_ARCHITEW6432%"=="AMD64" (
goto :is_wow64
)
if /I "%PROCESSOR_ARCHITECTURE%"=="x86" (
goto :is_x86
)
if /I "%PROCESSOR_ARCHITEW6432%"=="AMD64" (
goto :is_wow64
)
if /I "%PROCESSOR_ARCHITECTURE%"=="x86" (
goto :is_x86
)
)
goto :unsupported
@@ -63,16 +72,14 @@ goto :dll_exists
:is_wow64
set "systemfolder=%systemroot%\Sysnative"
:is_x64
set "WINDOWS_ARCHITECTURE=x64"
set "wufuc_dll=wufuc64.dll"
:dll_exists
set "wufuc_dll_fullpath=%~dp0%wufuc_dll%"
if exist "%wufuc_dll_fullpath%" (
goto :get_ver
)
if exist "%wufuc_dll_fullpath%" goto :check_winver
echo ERROR - Could not find %wufuc_dll_fullpath%!
echo.
echo This most likely means you tried to clone the repository.
@@ -87,21 +94,14 @@ echo This error could also mean that your anti-virus deleted or quarantined %wuf
echo in which case, you will need to make an exception and restore it.
goto :die
:get_ver
call :get_filever "%wufuc_dll_fullpath%"
if "%UNINSTALL%"=="1" (
title wufuc uninstaller - v%Version%
) else (
title wufuc installer - v%Version%
)
:check_winver
ver | findstr " 6\.1\." >nul && (
echo Detected supported operating system: Windows 7 %WINDOWS_ARCHITECTURE%
goto :check_mode
echo Detected supported operating system: Windows 7 %WINDOWS_ARCHITECTURE%
goto :check_mode
)
ver | findstr " 6\.3\." >nul && (
echo Detected supported operating system: Windows 8.1 %WINDOWS_ARCHITECTURE%
goto :check_mode
echo Detected supported operating system: Windows 8.1 %WINDOWS_ARCHITECTURE%
goto :check_mode
)
:unsupported
@@ -119,29 +119,8 @@ set "regkey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Executi
set "wufuc_dll_target=%systemfolder%\%wufuc_dll%"
if "%UNINSTALL%"=="1" goto :confirm_uninstall
if "%UNATTENDED%"=="1" goto :install
:pick_mode
echo.
echo Please enter one of the following numbers:
echo.
echo 1 - Install
echo 2 - Uninstall
echo.
set /p INSTALL_MODE=Would you like to install or uninstall wufuc?
if "%INSTALL_MODE%"=="1" (
goto :confirm_install
)
if "%INSTALL_MODE%"=="2" (
call :set_uninstall 1
goto :confirm_uninstall
)
echo.
echo Invalid choice, please enter 1 for install or 2 for uninstall.
goto :pick_mode
:: BEGIN INSTALL MODE
:: BEGIN INSTALL MODE /////////////////////////////////////////////////////////
:confirm_install
if "%UNATTENDED%"=="1" goto :install
echo.
@@ -151,23 +130,23 @@ echo systems with Intel Kaby Lake, AMD Ryzen, or other unsupported processors.
echo.
echo Please be absolutely sure you really need wufuc before proceeding.
echo.
set /p CONTINUE_INSTALL=Enter 'Y' if you want to install wufuc:
for /f "tokens=*" %%i in ('wmic /output:stdout datafile where "name='%wufuc_dll_fullpath:\=\\%'" get Version /value ^| find "="') do set "%%i"
set /p CONTINUE_INSTALL=Enter 'Y' if you want to install wufuc %Version%:
if /I "%CONTINUE_INSTALL%"=="Y" goto :install
goto :cancel
:install
call :uninstall
copy /Y "%wufuc_dll_fullpath%" "%wufuc_dll_target%" && (
reg add "%regkey%" /v GlobalFlag /t REG_DWORD /d 0x00000100 /f
reg add "%regkey%" /v VerifierDlls /t REG_SZ /d "%wufuc_dll%" /f
reg add "%regkey%" /v VerifierDlls /t REG_SZ /d "%wufuc_dll%" /f
reg add "%regkey%" /v GlobalFlag /t REG_DWORD /d 0x00000100 /f
)
echo.
echo wufuc has been successfully installed!
echo You will need to restart your PC to finish installing wufuc.
goto :confirm_restart
:: END INSTALL MODE
:: END INSTALL MODE ///////////////////////////////////////////////////////////
:: BEGIN UNINSTALL MODE
:: BEGIN UNINSTALL MODE ///////////////////////////////////////////////////////
:confirm_uninstall
if "%UNATTENDED%"=="1" goto :uninstall_stub
echo.
@@ -181,23 +160,28 @@ echo You will need to restart your PC to finish uninstalling wufuc.
goto :confirm_restart
:uninstall
call :remove_legacy
reg query "%regkey%" >nul 2>&1 || (
goto :delete_target
)
reg delete "%regkey%" /f || (
goto :skip_delete
)
sfc /SCANFILE="%systemroot%\System32\wuaueng.dll"
set "wufuc_task=wufuc.{72EEE38B-9997-42BD-85D3-2DD96DA17307}"
schtasks /Query /TN "%wufuc_task%" >nul 2>&1 && (
schtasks /Delete /TN "%wufuc_task%" /F
)
rundll32 "%wufuc_dll_fullpath%",RUNDLL32_LegacyUnload
reg query "%regkey%" >nul 2>&1 || (
goto :delete_target
)
reg delete "%regkey%" /f || (
goto :skip_delete
)
:delete_target
set "del_ext=.del-%random%"
if exist "%wufuc_dll_target%" (
ren "%wufuc_dll_target%" "%wufuc_dll%%del_ext%" && (
rundll32 "%wufuc_dll_fullpath%",RUNDLL32_DeleteFile "%wufuc_dll_target%%del_ext%"
)
)
set "del_ext=.del-%random%"
if exist "%wufuc_dll_target%" (
ren "%wufuc_dll_target%" "%wufuc_dll%%del_ext%" && (
rundll32 "%wufuc_dll_fullpath%",RUNDLL32_DeleteFile "%wufuc_dll_target%%del_ext%"
)
)
:skip_delete
exit /b
:: END UNINSTALL MODE
exit /b
:: END UNINSTALL MODE /////////////////////////////////////////////////////////
:confirm_restart
if "%NORESTART%"=="1" goto :die
@@ -206,45 +190,22 @@ echo.
set /p CONTINUE_RESTART=Enter 'Y' if you would like to restart now:
if /I "%CONTINUE_RESTART%"=="Y" goto :restart
goto :die
:restart
shutdown /r /t 0
goto :die
:die
echo.
echo Press any key to exit...
pause >nul
exit
if "%UNATTENDED%"=="1" (
timeout /T 5 /NOBREAK
) else (
echo Press any key to exit...
pause >nul
)
exit /b
:cancel
echo.
echo Canceled by user, press any key to exit...
pause >nul
exit
:get_filever
set "file=%~1"
for /f "tokens=*" %%i in ('wmic /output:stdout datafile where "name='%file:\=\\%'" get Version /value ^| find "="') do set "%%i"
exit /b
:remove_legacy
sfc /SCANFILE="%systemroot%\System32\wuaueng.dll"
set "wufuc_task=wufuc.{72EEE38B-9997-42BD-85D3-2DD96DA17307}"
schtasks /Query /TN "%wufuc_task%" >nul 2>&1 && (
schtasks /Delete /TN "%wufuc_task%" /F
)
rundll32 "%wufuc_dll_fullpath%",RUNDLL32_LegacyUnload
exit /b
:set_unattended
set "UNATTENDED=%~1"
exit /b
:set_uninstall
set "UNINSTALL=%~1"
exit /b
:set_norestart
set "NORESTART=%~1"
exit /b

View File

@@ -0,0 +1,17 @@
@echo off
:: Copyright (C) 2017 zeffy
:: This program is free software: you can redistribute it and/or modify
:: it under the terms of the GNU General Public License as published by
:: the Free Software Foundation, either version 3 of the License, or
:: (at your option) any later version.
:: This program is distributed in the hope that it will be useful,
:: but WITHOUT ANY WARRANTY; without even the implied warranty of
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
:: GNU General Public License for more details.
:: You should have received a copy of the GNU General Public License
:: along with this program. If not, see <http://www.gnu.org/licenses/>.
call "%~dp0install_wufuc.bat" /UNINSTALL %*