فهرست منبع

📰 Update Launcher.bat

VLADYSLAV BOBER 11 ماه پیش
والد
کامیت
926ef114d7
1فایلهای تغییر یافته به همراه55 افزوده شده و 31 حذف شده
  1. 55 31
      Launcher.bat

+ 55 - 31
Launcher.bat

@@ -2,23 +2,36 @@
 setlocal enabledelayedexpansion
 
 :: ====================================================
-:: Check for admin rights
+:: Define PowerShell paths
 :: ====================================================
->nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
-if '%errorlevel%' NEQ '0' (
-    echo Requesting elevation...
-    goto UACPrompt
+set "PS5_PATH=%systemdrive%\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
+set "PS7_PATH=%ProgramFiles%\PowerShell\7\pwsh.exe"
+set "PS7_PREVIEW_PATH=%ProgramFiles%\PowerShell\7-preview\pwsh.exe"
+
+:: Find best PowerShell for admin elevation
+set "ELEVATION_PS="
+if exist "%PS7_PREVIEW_PATH%" (
+    set "ELEVATION_PS=%PS7_PREVIEW_PATH%"
+) else if exist "%PS7_PATH%" (
+    set "ELEVATION_PS=%PS7_PATH%"
+) else if exist "%PS5_PATH%" (
+    set "ELEVATION_PS=%PS5_PATH%"
+) else (
+    echo [ERROR] No PowerShell found for elevation!
+    pause
+    exit /b 1
 )
-goto Admin
 
-:UACPrompt
-    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
-    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
-    "%temp%\getadmin.vbs"
-    del "%temp%\getadmin.vbs"
-    exit /B
+:: ====================================================
+:: Launch with admin rights
+:: ====================================================
+if "%1"=="admin" goto :AdminMode
+
+echo [INFO] Launch with admin rights...
+"%ELEVATION_PS%" -Command "Start-Process cmd -ArgumentList '/c \"%~f0\" admin' -Verb RunAs"
+exit /B
 
-:Admin
+:AdminMode
 pushd "%CD%"
 CD /D "%~dp0"
 
@@ -28,43 +41,45 @@ CD /D "%~dp0"
 
 title Visual Studio Telemetry Disable Launcher
 
+:: Set script directory
 set "SCRIPT_DIR=%~dp0"
 
-set "PS7_PATH=C:\Program Files\PowerShell\7\pwsh.exe"
-set "PS7_PREVIEW_PATH=C:\Program Files\PowerShell\7-preview\pwsh.exe"
-set "PS5_PATH=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
-
+:: Initialize variables
 set "PS_EXE="
 set "PS_SCRIPT="
 set "PS_VERSION="
 set "SCRIPT_TYPE="
 
 :: ====================================================
-:: Find PowerShell Executable
+:: Find PowerShell Executable (пріоритет: Preview > 7 > 5)
 :: ====================================================
 
-if exist "%PS7_PATH%" (
-    set "PS_EXE=%PS7_PATH%"
-    set "PS_VERSION=PowerShell 7"
-    goto :found_powershell
-)
-
 if exist "%PS7_PREVIEW_PATH%" (
     set "PS_EXE=%PS7_PREVIEW_PATH%"
     set "PS_VERSION=PowerShell 7 Preview"
+    set "PS_MAJOR=7"
+    goto :found_powershell
+)
+
+if exist "%PS7_PATH%" (
+    set "PS_EXE=%PS7_PATH%"
+    set "PS_VERSION=PowerShell 7"
+    set "PS_MAJOR=7"
     goto :found_powershell
 )
 
 if exist "%PS5_PATH%" (
     set "PS_EXE=%PS5_PATH%"
     set "PS_VERSION=PowerShell 5"
+    set "PS_MAJOR=5"
     goto :found_powershell
 )
 
 echo [ERROR] No compatible PowerShell version found!
 echo.
 echo Please install either:
-echo  - PowerShell 7 (recommended)
+echo  - PowerShell 7 Preview (recommended)
+echo  - PowerShell 7 
 echo  - PowerShell 5 (Windows PowerShell)
 echo.
 pause
@@ -80,13 +95,20 @@ for /f "tokens=4-5 delims=. " %%i in ('ver') do (
     set "WIN_MINOR=%%j"
 )
 
-:: Select appropriate script
-if "%PS_VERSION%"=="PowerShell 5" (
-    set "SCRIPT_BASENAME=off_telemetry_ps5_win7+.ps1"
-    set "SCRIPT_TYPE=PowerShell 5 (Windows 7+)"
+:: ====================================================
+:: Choose Script Based on Windows Version AND PowerShell Version
+:: ====================================================
+if !WIN_MAJOR! GEQ 10 (
+    if !PS_MAJOR!==5 (
+        set "SCRIPT_BASENAME=off_telemetry_ps5_win7+.ps1"
+        set "SCRIPT_TYPE=Windows 10/11 with PowerShell 5"
+    ) else (
+        set "SCRIPT_BASENAME=off_telemetry_ps7.ps1"
+        set "SCRIPT_TYPE=Windows 10/11 with PowerShell 7"
+    )
 ) else (
-    set "SCRIPT_BASENAME=off_telemetry_ps7.ps1"
-    set "SCRIPT_TYPE=PowerShell 7 (all Windows versions)"
+    set "SCRIPT_BASENAME=off_telemetry_ps5_win7+.ps1"
+    set "SCRIPT_TYPE=Windows 7/8/8.1"
 )
 
 :: ====================================================
@@ -169,6 +191,8 @@ echo [INFO] Launching Visual Studio Telemetry Disabler...
 echo [INFO] PowerShell: %PS_VERSION%
 echo [INFO] Script: !SCRIPT_TYPE!
 echo.
+echo [WARNING] Administrator rights may be required for some registry changes.
+echo.
 
 cd /d "%SCRIPT_DIR%"