diff --git a/scripts/auto_repairs.py b/scripts/auto_repairs.py index 5bb19f17..9172e2c4 100644 --- a/scripts/auto_repairs.py +++ b/scripts/auto_repairs.py @@ -70,7 +70,7 @@ BASE_MENUS = { MenuEntry('AdwCleaner', 'auto_adwcleaner'), MenuEntry('Malwarebytes (Run)', 'auto_mbam_run'), MenuEntry('Malwarebytes (Uninstall)', 'auto_mbam_uninstall'), - MenuEntry('UninstallView', 'auto_uninstallview'), + MenuEntry('Bulk Crap Uninstaller', 'auto_bcuninstaller'), MenuEntry('Enable Windows Updates', 'auto_windows_updates_enable'), ), }, diff --git a/scripts/wk/cfg/launchers.py b/scripts/wk/cfg/launchers.py index 2c5eb4e6..8884ab5b 100644 --- a/scripts/wk/cfg/launchers.py +++ b/scripts/wk/cfg/launchers.py @@ -75,6 +75,12 @@ LAUNCHERS = { 'L_PATH': 'BlueScreenView', 'L_ITEM': 'BlueScreenView.exe', }, + 'BCUninstaller': { + 'L_TYPE': 'Executable', + 'L_PATH': 'BCUninstaller', + 'L_ITEM': 'BCUninstaller.exe', + 'L_ELEV': 'True', + }, 'ConEmu (as ADMIN)': { 'L_TYPE': 'Executable', 'L_PATH': 'ConEmu', @@ -112,7 +118,7 @@ LAUNCHERS = { }, 'Display Driver Uninstaller': { 'L_TYPE': 'Executable', - 'L_PATH': 'DisplayDriverUninstaller', + 'L_PATH': 'DDU', 'L_ITEM': 'Display Driver Uninstaller.exe', 'L_ELEV': 'True', }, diff --git a/scripts/wk/cfg/sources.py b/scripts/wk/cfg/sources.py index 0045742c..1a0f8b4b 100644 --- a/scripts/wk/cfg/sources.py +++ b/scripts/wk/cfg/sources.py @@ -32,37 +32,37 @@ SOURCES = { 'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe', # Build Kit - 'AIDA64': 'https://download.aida64.com/aida64engineer675.zip', - 'Adobe Reader DC': 'https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/2300320201/AcroRdrDC2300320201_en_US.exe', + 'AIDA64': 'https://download.aida64.com/aida64engineer692.zip', + 'Adobe Reader DC': 'https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/2300620360/AcroRdrDC2300620360_en_US.exe', 'Aria2': 'https://github.com/aria2/aria2/releases/download/release-1.36.0/aria2-1.36.0-win-32bit-build1.zip', 'Autoruns32': 'http://live.sysinternals.com/Autoruns.exe', 'Autoruns64': 'http://live.sysinternals.com/Autoruns64.exe', 'BleachBit': 'https://download.bleachbit.org/BleachBit-4.4.2-portable.zip', + 'BCUninstaller': 'https://github.com/Klocman/Bulk-Crap-Uninstaller/releases/download/v5.7/BCUninstaller_5.7_portable.zip', 'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip', 'BlueScreenView64': 'http://www.nirsoft.net/utils/bluescreenview-x64.zip', + 'DDU': 'https://www.wagnardsoft.com/DDU/download/DDU%20v18.0.6.8.exe', 'ERUNT': 'http://www.aumha.org/downloads/erunt.zip', 'Everything32': 'https://www.voidtools.com/Everything-1.4.1.1024.x86.zip', 'Everything64': 'https://www.voidtools.com/Everything-1.4.1.1024.x64.zip', - 'FastCopy': 'https://download.softrepository.com/files/tools/FastCopy4.2.2_installer.exe', + 'FastCopy': 'https://github.com/FastCopyLab/FastCopyDist2/blob/main/FastCopy5.4.2_installer.exe', 'Fluent-Metro': 'https://github.com/bonzibudd/Fluent-Metro/releases/download/v1.5.3/Fluent-Metro_1.5.3.zip', - 'FurMark': 'https://geeks3d.com/dl/get/696', - 'HWiNFO': 'https://www.sac.sk/download/utildiag/hwi_746.zip', - 'LibreOffice32': 'https://download.documentfoundation.org/libreoffice/stable/7.5.5/win/x86/LibreOffice_7.5.5_Win_x86.msi', - 'LibreOffice64': 'https://download.documentfoundation.org/libreoffice/stable/7.5.5/win/x86_64/LibreOffice_7.5.5_Win_x86-64.msi', + 'FurMark': 'https://geeks3d.com/dl/get/728', + 'HWiNFO': 'https://www.sac.sk/download/utildiag/hwi_764.zip', + 'LibreOffice32': 'https://download.documentfoundation.org/libreoffice/stable/7.6.2/win/x86/LibreOffice_7.6.2_Win_x86.msi', + 'LibreOffice64': 'https://download.documentfoundation.org/libreoffice/stable/7.6.2/win/x86_64/LibreOffice_7.6.2_Win_x86-64.msi', 'Linux Reader': 'https://www.diskinternals.com/download/Linux_Reader.exe', 'Macs Fan Control': 'https://www.crystalidea.com/downloads/macsfancontrol_setup.exe', 'Neutron': 'http://keir.net/download/neutron.zip', - 'Notepad++': 'https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.5.4/npp.8.5.4.portable.minimalist.7z', - 'OpenShell': 'https://github.com/Open-Shell/Open-Shell-Menu/releases/download/v4.4.170/OpenShellSetup_4_4_170.exe', + 'Notepad++': 'https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.5.8/npp.8.5.8.portable.minimalist.7z', + 'OpenShell': 'https://github.com/Open-Shell/Open-Shell-Menu/releases/download/v4.4.191/OpenShellSetup_4_4_191.exe', 'Prime95': 'https://www.mersenne.org/download/software/v30/30.8/p95v308b17.win64.zip', 'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip', 'SDIO Torrent': 'https://www.glenn.delahoy.com/downloads/sdio/SDIO_Update.torrent', 'ShutUp10': 'https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe', 'Windows Repair AIO': 'http://www.tweaking.com/files/setups/tweaking.com_windows_repair_aio.zip', 'WinSCP': 'https://sourceforge.net/projects/winscp/files/WinSCP/5.19.5/WinSCP-5.19.5-Portable.zip/download', - 'UninstallView32': 'https://www.nirsoft.net/utils/uninstallview.zip', - 'UninstallView64': 'https://www.nirsoft.net/utils/uninstallview-x64.zip', - 'WizTree': 'https://diskanalyzer.com/files/wiztree_4_14_portable.zip', + 'WizTree': 'https://diskanalyzer.com/files/wiztree_4_15_portable.zip', 'XMPlay': 'https://support.xmplay.com/files/20/xmplay385.zip?v=47090', 'XMPlay 7z': 'https://support.xmplay.com/files/16/xmp-7z.zip?v=800962', 'XMPlay Game': 'https://support.xmplay.com/files/12/xmp-gme.zip?v=515637', diff --git a/scripts/wk/kit/build_win.py b/scripts/wk/kit/build_win.py index fbf9c5c9..ab0a16a2 100644 --- a/scripts/wk/kit/build_win.py +++ b/scripts/wk/kit/build_win.py @@ -181,6 +181,29 @@ def download_coretemp(): delete_from_temp('coretemp64.zip') +def download_ddu() -> None: + """Download Display Driver Uninstaller.""" + archive = download_to_temp('DDU.exe', SOURCES['DDU']) + out_path = BIN_DIR.joinpath('DDU') + extract_archive(archive, out_path, 'DDU*/*.*', mode='e') + out_path = out_path.joinpath('Settings') + for item in ('AMD', 'INTEL', 'Languages', 'NVIDIA', 'REALTEK'): + extract_archive( + archive, + out_path.joinpath(item), + f'DDU*/Settings/{item}/*', + mode='e', + ) + delete_from_temp('DDU.exe') + + +def download_bcuninstaller() -> None: + """Download Bulk Crap Uninstaller.""" + archive = download_to_temp('BCU.zip', SOURCES['BCUninstaller']) + extract_to_bin(archive, 'BCUninstaller') + delete_from_temp('BCU.zip') + + def download_erunt() -> None: """Download ERUNT.""" archive = download_to_temp('erunt.zip', SOURCES['ERUNT']) @@ -389,21 +412,6 @@ def download_snappy_driver_installer_origin() -> None: delete_from_temp('fake.7z') -def download_uninstallview() -> None: - """Download UninstallView.""" - archive_32 = download_to_temp('uninstallview32.zip', SOURCES['UninstallView32']) - archive_64 = download_to_temp('uninstallview64.zip', SOURCES['UninstallView64']) - out_path = BIN_DIR.joinpath('UninstallView') - extract_archive(archive_64, out_path, 'UninstallView.exe') - rename_item( - out_path.joinpath('UninstallView.exe'), - out_path.joinpath('UninstallView64.exe'), - ) - extract_archive(archive_32, out_path) - delete_from_temp('uninstallview32.zip') - delete_from_temp('uninstallview64.zip') - - def download_windows_repair_aio(): """Download Windows Repair AIO.""" archive = download_to_temp('winrepairaio.zip', SOURCES['Windows Repair AIO']) @@ -539,6 +547,8 @@ def build_kit() -> None: try_print.run('BlueScreenView...', download_bluescreenview) try_print.run('CoreTemp...', download_coretemp) try_print.run('ERUNT...', download_erunt) + try_print.run('BulkCrapUninstaller...', download_bcuninstaller) + try_print.run('DDU...', download_ddu) try_print.run('Everything...', download_everything) try_print.run('FastCopy...', download_fastcopy) try_print.run('FurMark...', download_furmark) @@ -552,7 +562,6 @@ def build_kit() -> None: try_print.run('OpenShell...', download_openshell) try_print.run('Prime95...', download_prime95) try_print.run('PuTTY...', download_putty) - try_print.run('UninstallView...', download_uninstallview) try_print.run('WinSCP...', download_winscp) try_print.run('Windows Repair AIO...', download_windows_repair_aio) try_print.run('WizTree...', download_wiztree) diff --git a/scripts/wk/repairs/win.py b/scripts/wk/repairs/win.py index 2810f966..8d7a3478 100644 --- a/scripts/wk/repairs/win.py +++ b/scripts/wk/repairs/win.py @@ -688,6 +688,14 @@ def auto_bleachbit(group, name) -> None: save_settings(group, name, result=result) +def auto_bcuninstaller(group, name) -> None: + """Run BCUninstaller.""" + result = TRY_PRINT.run( + 'BCUninstaller...', run_bcuninstaller, msg_good='DONE', + ) + save_settings(group, name, result=result) + + def auto_chkdsk(group, name) -> None: """Run CHKDSK repairs.""" needs_reboot = False @@ -932,14 +940,6 @@ def auto_system_restore_set_size(group, name) -> None: save_settings(group, name, result=result) -def auto_uninstallview(group, name) -> None: - """Run UninstallView.""" - result = TRY_PRINT.run( - 'UninstallView...', run_uninstallview, msg_good='DONE', - ) - save_settings(group, name, result=result) - - def auto_windows_updates_disable(group, name) -> None: """Disable Windows Updates.""" result = TRY_PRINT.run('Disable Windows Updates...', disable_windows_updates) @@ -1250,6 +1250,11 @@ def run_emsisoft_cmd_scan(): proc.wait() +def run_bcuninstaller() -> None: + """Run BCUninstaller.""" + run_tool('BCUninstaller', 'BCUninstaller') + + def run_hitmanpro() -> None: """Run HitmanPro scan.""" log_path = format_log_path(log_name='HitmanPro', timestamp=True, tool=True) diff --git a/setup/windows/bin/DeviceCleanup/DeviceCleanup.txt b/setup/windows/bin/DeviceCleanup/DeviceCleanup.txt new file mode 100644 index 00000000..cc5a33e0 --- /dev/null +++ b/setup/windows/bin/DeviceCleanup/DeviceCleanup.txt @@ -0,0 +1,81 @@ + +DeviceCleanup V1.2.1 - Removes non-present devices from the Windows device management +Freeware by Uwe Sieber - www.uwe-sieber.de + +Works under Window 2000, XP, Windows Vista, Windows 7, 8, 10, 11 and their Server versions. + +On x64 Windows only the x64 release can delete devices. + + +All devices listed by DeviceCleanup are currently not present, usually they have the problem +code 45 which is CM_PROB_PHANTOM, "The devinst currently exists only in the registry". + +You can select one, multiple or all devices and remove them by pressing the Delete key or +right-click and select "Remove Device". If the device is attached again it will be detected as new. + +The 'last used' time comes from the write time of the device's registry key +under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum + +On some Windows the times are set on startup or even while it is running every few hours, +so all devices seem to have the same age. On a Windows 7 the Sysinternal ProcessMonitor +shows a recurring RegSetKeySecurity caused by a svchost.exe hosting the PlugPlay service +every 11 hours 45 minutes. No idea what is causing it. I you want to check yourself: +Set a filter "operation is RegSetKeySecurity" and set the option "Filter -> Drop filtered +events", otherwise your pagefile (or other backing file) gets flooded in no time. + +On most Windows the time is set when the device gets active, so it makes sense to use this as +'last used' time. + +If the last device using a certain COM-port is removed then the reservation under +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter +is removed. +Since Windows 10 version 1903 there is a sub-key "Devices" here where Windows keeps track of COM-ports +and their devices. Windows uses this to remove the reservation when a COM-port device is uninstalled. +Finally after 25 years... + +For removing devices admin privileges are required, otherwise you get an access denied error. + + +System Restore Point + +Since Windows 8 one can only create one SRP within 24 hours. For any further the API pretends to have +created one but did nothing in fact. +This can be overruled by setting the registry value SystemRestorePointCreationFrequency under +HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore to a minimal allowed +interval in minutes, 0 disables the blocking completely. +When creating a System Restore Point, DeviceCleanup sets this value to 0 temporarily. + + +Setting in the INI file + +By default the settings are stored in a DeviceCleanup.ini file beside the EXE. +Since V1.2, when running from the "C:\Program Files" folder and the INI cannot be written because of +missing admin privileges it writes to "C:\ProgramData\Uwe Sieber\DeviceCleanup.ini" instead. + + + +A command line version is available too: +http://www.uwe-sieber.de/misc_tools_e.html#devicecleanupcmd + + + +Licence: Freeware + +Allowed: +- usage in any environment, including commercial +- include in software products, including commercial +- include on CD/DVD of computer magazines +- making available for download by means of package managers + +Not allowed: +- modify any of the files +- offer for download by means of a "downloader" software + + + +Uwe Sieber, mail@uwe-sieber.de +Dec 2021 + + + + diff --git a/setup/windows/bin/DeviceCleanup/DeviceCleanup32.exe b/setup/windows/bin/DeviceCleanup/DeviceCleanup32.exe new file mode 100644 index 00000000..ebe0d2ee Binary files /dev/null and b/setup/windows/bin/DeviceCleanup/DeviceCleanup32.exe differ diff --git a/setup/windows/bin/DeviceCleanup/DeviceCleanup64.exe b/setup/windows/bin/DeviceCleanup/DeviceCleanup64.exe new file mode 100644 index 00000000..ec6cfc11 Binary files /dev/null and b/setup/windows/bin/DeviceCleanup/DeviceCleanup64.exe differ diff --git a/setup/windows/build.ps1 b/setup/windows/build.ps1 index 6a638ecb..74909f99 100644 --- a/setup/windows/build.ps1 +++ b/setup/windows/build.ps1 @@ -109,10 +109,10 @@ if ($MyInvocation.InvocationName -ne ".") { # Python: psutil $DownloadPage = "https://pypi.org/project/psutil/" - $RegEx = "href=.*-cp36-abi3-win32.whl" + $RegEx = "href=.*-abi3-win32.whl" $Url = FindDynamicUrl $DownloadPage $RegEx DownloadFile -Path $Temp -Name "psutil32.whl" -Url $Url - $RegEx = "href=.*-cp36-abi3-win_amd64.whl" + $RegEx = "href=.*-abi3-win_amd64.whl" $Url = FindDynamicUrl $DownloadPage $RegEx DownloadFile -Path $Temp -Name "psutil64.whl" -Url $Url diff --git a/setup/windows/sources.json b/setup/windows/sources.json index 29e67152..48de2c98 100644 --- a/setup/windows/sources.json +++ b/setup/windows/sources.json @@ -1,6 +1,6 @@ { "7-Zip": "https://7-zip.org/a/7z2301.msi", - "ConEmu": "https://github.com/Maximus5/ConEmu/releases/download/v22.12.18/ConEmuPack.221218.7z", - "Python x32": "https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-win32.zip", - "Python x64": "https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-amd64.zip" + "ConEmu": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z", + "Python x32": "https://www.python.org/ftp/python/3.12.0/python-3.12.0-embed-win32.zip", + "Python x64": "https://www.python.org/ftp/python/3.12.0/python-3.12.0-embed-amd64.zip" }