├── AppxDBEditor.cmd ├── AppxPackageList.txt ├── Examples └── UnlockHolographic.txt ├── LICENSE ├── README.md ├── Resources ├── Docs │ ├── Screenshot.png │ └── SoftSonic83.png ├── SQL │ └── SQLHeaderText.res └── Script │ └── ScriptTitleText.res ├── SQL ├── BuildSQLStatements.sql └── ExportPackageList.sql └── Tools ├── FART ├── x64 │ └── FART.EXE └── x86 │ └── FART.EXE ├── NIRCMD ├── x64 │ └── NIRCMD.EXE └── x86 │ └── NIRCMD.EXE └── SQLITE └── SQLITE.EXE /AppxDBEditor.cmd: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | ECHO OFF 3 | CLS 4 | 5 | REM ########################################################################################################### 6 | 7 | REM ### Create new Variable Namespace ### 8 | SETLOCAL ENABLEDELAYEDEXPANSION 9 | 10 | REM ### Initialize Script Workspace ### 11 | SET SOURCEPATH=%~dp0 12 | IF /I "%SOURCEPATH:~-1%"=="\" SET SOURCEPATH=%SOURCEPATH:~0,-1% 13 | PUSHD "%SOURCEPATH%" >NUL 2>&1 14 | FOR /F "tokens=* delims=" %%A IN ('CD') DO (SET WORKINGDIR=%%A) 15 | IF /I "%WORKINGDIR:~-1%"=="\" SET WORKINGDIR=%WORKINGDIR:~0,-1% 16 | 17 | REM ### Initialize Error Handling Variables ### 18 | SET ERRORCODE=0 19 | SET ERRORMODULE=MAIN 20 | SET ERRORSOURCE= 21 | SET ERROROUTPUT=%TEMP%\ERROROUTPUT.TMP 22 | SET ERRORHANDLER=^>"^!ERROROUTPUT^!" 2^>^&1 23 | SET LF=^ 24 | 25 | 26 | REM ### Keep Line-Feeds above for Error Handling ### 27 | DEL /A /F /Q "%ERROROUTPUT%" >NUL 2>&1 28 | VERIFY >NUL 29 | 30 | REM ### Initialize and Configure Code Page Settings ### 31 | FOR /F "tokens=2 delims=.:" %%A IN ('CHCP') DO (SET "CODEPAGE=%%A" & SET "CODEPAGE=!CODEPAGE: =!") 32 | CHCP 1252 %ERRORHANDLER% 33 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=CHCP" & GOTO ERROR) 34 | 35 | REM ### Configure Version and Script Titles ### 36 | SET VERSION=v1.2 by SoftSonic83 37 | SET TITLE=APPX-DB Modification Script %VERSION% 38 | TITLE %TITLE% %ERRORHANDLER% 39 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=TITLE" & GOTO ERROR) 40 | 41 | REM ########################################################################################################### 42 | 43 | REM ### Detect Operating System Bitness ### 44 | SET BITNESS=x64 45 | IF %PROCESSOR_ARCHITECTURE%==x86 ( 46 | IF NOT DEFINED PROCESSOR_ARCHITEW6432 ( 47 | SET BITNESS=x86 48 | ) 49 | ) 50 | 51 | REM ### Define Paths for Tools and Functions ### 52 | SET FART=%WORKINGDIR%\Tools\FART\%BITNESS%\FART.EXE 53 | SET NIRCMD=%SOURCEPATH%\Tools\NIRCMD\%BITNESS%\NIRCMD.EXE 54 | SET SQLITE=%SOURCEPATH%\Tools\SQLITE\SQLITE.EXE 55 | 56 | REM ### Define Macros for Function Calls ### 57 | SET RUNASSYSTEM="%NIRCMD%" ELEVATECMD RUNASSYSTEM "%NIRCMD%" EXEC HIDE CMD /C 58 | SET CMDSYNCWAIT=START "" /B /WAIT "%NIRCMD%" WAIT 59 | 60 | REM ########################################################################################################### 61 | 62 | REM ### Define Script Behavior Parameters ### 63 | SET SCRIPT_IGNOREMISSINGPKG=TRUE 64 | 65 | REM ### Initialize additional Script Variables ### 66 | SET BREAK_A= 67 | SET BREAK_B= 68 | SET OPERATION= 69 | SET RUNMODE=NORMAL 70 | SET /A STEPINDEX=0 71 | SET /A SUBSTEPINDEX=0 72 | 73 | REM ### Define Appx-DB related Paths and Script Constants ### 74 | SET APPX_DATABASEPATH=%ProgramData%\Microsoft\Windows\AppRepository\StateRepository-Machine.srd 75 | SET APPX_DATABASEPATH_NEW= 76 | SET APPX_PACKAGELIST=%WORKINGDIR%\AppxPackageList.txt 77 | SET APPX_PACKAGELIST_NEW= 78 | SET APPX_PACKAGEDUMP=%WORKINGDIR%\AppxPackageDump.txt 79 | SET APPX_PACKAGEDUMP_TEMP=%TEMP%\AppxPackageDump.txt 80 | SET APPX_PACKAGEDUMP_NEW= 81 | SET APPX_BACKUPTIMESTAMP=^^!DATE:~-4^^!^^!DATE:~3,2^^!^^!DATE:~0,2^^!_^^!TIME:~0,2^^!^^!TIME:~3,2^^!^^!TIME:~6,2^^! 82 | SET APPX_BACKUPBASEPATH=%WORKINGDIR%\Backup 83 | SET APPX_BACKUPBASEPATH_NEW= 84 | SET APPX_BACKUPMAINPATH= 85 | SET APPX_PARAMOK=FALSE 86 | SET APPX_PACKAGENAME= 87 | SET APPX_ISINBOX= 88 | SET APPX_ISINBOX_DUMP= 89 | SET APPX_DATABASEOK=FALSE 90 | DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 91 | MKDIR "%APPX_BACKUPBASEPATH%" >NUL 2>&1 92 | VERIFY >NUL 93 | 94 | REM ### Define Resource related Paths and Script Constants ### 95 | SET RES_SQL_HEADERTEXT=%WORKINGDIR%\Resources\SQL\SQLHeaderText.res 96 | SET RES_SCRIPT_TITLETEXT=%WORKINGDIR%\Resources\Script\ScriptTitleText.res 97 | 98 | REM ### Define SQL-Script related Paths and Script Constants ### 99 | SET SQL_SYNCTIME=1000 100 | SET SQL_FILESOK=FALSE 101 | SET SQL_EXPORTPACKAGELIST=%SOURCEPATH%\SQL\ExportPackageList.sql 102 | SET SQL_BUILDSQLSTATEMENTS_ORIG=%WORKINGDIR%\SQL\BuildSQLStatements.sql 103 | SET SQL_BUILDSQLSTATEMENTS_TEMP=%TEMP%\BuildSQLStatements.sql 104 | SET SQL_DROPTRIGGERS_TEMP=%TEMP%\DropTriggers.sql 105 | SET SQL_CREATETRIGGERS_TEMP=%TEMP%\CreateTriggers.sql 106 | SET SQL_MODIFYAPPXDB_TEMP=%TEMP%\ModifyAppxDB.sql 107 | SET SQL_RESULTSCRIPT=%WORKINGDIR%\ResultScript.sql 108 | DEL /A /F /Q "%SQL_BUILDSQLSTATEMENTS_TEMP%" >NUL 2>&1 109 | DEL /A /F /Q "%SQL_DROPTRIGGERS_TEMP%" >NUL 2>&1 110 | DEL /A /F /Q "%SQL_CREATETRIGGERS_TEMP%" >NUL 2>&1 111 | DEL /A /F /Q "%SQL_MODIFYAPPXDB_TEMP%" >NUL 2>&1 112 | VERIFY >NUL 113 | 114 | REM ########################################################################################################### 115 | 116 | REM ### Check Administrator Privileges ### 117 | NET SESSION >NUL 2>&1 118 | IF !ERRORLEVEL!==0 ( 119 | GOTO ADMIN 120 | ) ELSE ( 121 | GOTO NOADMIN 122 | ) 123 | 124 | :ADMIN 125 | 126 | REM ### Scipt is running with Administrator Privileges ### 127 | DEL /A /F /Q "%TEMP%\GETADMIN.VBS" >NUL 2>&1 128 | VERIFY >NUL 129 | GOTO START 130 | 131 | :NOADMIN 132 | 133 | REM ### Scipt is running without Administrator Privileges ### 134 | SET PARAMS=%* 135 | IF DEFINED PARAMS SET PARAMS=!PARAMS:"=""! 136 | ECHO Set UAC=CreateObject^("Shell.Application"^)>"%TEMP%\GETADMIN.VBS" 137 | ECHO UAC.ShellExecute "CMD", "/C """"%~f0"" %PARAMS%""", "", "runas", ^1>>"%TEMP%\GETADMIN.VBS" 138 | EXPLORER "%TEMP%\GETADMIN.VBS" >NUL 2>&1 139 | VERIFY >NUL 140 | GOTO EXIT 141 | 142 | REM ########################################################################################################### 143 | 144 | :START 145 | 146 | REM ### Display Title Message and Disclaimer ### 147 | CLS 148 | ECHO %TITLE% 149 | ECHO. 150 | SET ERRORCODE=0 151 | IF EXIST "%RES_SCRIPT_TITLETEXT%" ( 152 | FOR /F "usebackq tokens=* delims=" %%A IN ("%RES_SCRIPT_TITLETEXT%") DO (ECHO %%A) 153 | ) ELSE ( 154 | SET ERRORCODE=1 155 | SET ERRORMODULE=MAIN 156 | SET ERRORSOURCE=Resource File missing 157 | ECHO ERROR: Resource File not found^^! 158 | ECHO. 159 | ECHO The Resource File "%RES_SCRIPT_TITLETEXT%" 160 | ECHO is missing^^! Please check your Installation Source or redownload the Script. 161 | GOTO ERROR 162 | ) 163 | ECHO. 164 | PAUSE 165 | GOTO MAINMENU 166 | 167 | REM ########################################################################################################### 168 | 169 | :MAINMENU 170 | 171 | REM ### Display Main Menu of this Script ### 172 | CLS 173 | ECHO %TITLE% 174 | ECHO. 175 | SET ERRORCODE=0 176 | SET CHOICE= 177 | SET OPERATION= 178 | SET RUNMODE=NORMAL 179 | ECHO Please select the desired Action from the Menu. 180 | ECHO The Input for the Option is Case-Insensitive. 181 | ECHO. 182 | ECHO Appx-Database File : [%APPX_DATABASEPATH%] 183 | ECHO Appx-Package List : [%APPX_PACKAGELIST%] 184 | ECHO Appx-Package Dump : [%APPX_PACKAGEDUMP%] 185 | ECHO. 186 | ECHO Backup-Directory : [%APPX_BACKUPBASEPATH%] 187 | ECHO. 188 | ECHO [B] : (B)ackup all Appx-Database Files (*.srd*) 189 | ECHO [D] : (D)ump Package List from Appx-Database into a Text File 190 | ECHO [M] : (M)odify Appx-Database to change the Protection of Packages 191 | ECHO   192 | ECHO [T] : (T)est-Mode: Only create SQL-File without altering the Database 193 | ECHO   194 | ECHO [1] : (1) Select another Appx-Database File 195 | ECHO [2] : (2) Select another Appx-Package List File 196 | ECHO [3] : (3) Select another Appx-Package Dump File 197 | ECHO [3] : (4) Select another Backup-Directory 198 | ECHO   199 | ECHO [R] : (R)estore Default File Paths and Settings 200 | ECHO   201 | ECHO [Q] : (Q)uit Application 202 | ECHO. 203 | SET /P "CHOICE=Selection [B/D/M/T/1-4/R/Q] (Q): " 204 | IF NOT %ERRORLEVEL%==0 (SET "OPERATION=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO EXIT) 205 | IF NOT DEFINED CHOICE (SET "OPERATION=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO EXIT) 206 | IF /I "%CHOICE%"=="Q" (SET "OPERATION=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO EXIT) 207 | IF /I "%CHOICE%"=="B" (SET "OPERATION=BACKUPDATABASE" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 208 | IF /I "%CHOICE%"=="D" (SET "OPERATION=EXPORTAPPXLIST" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 209 | IF /I "%CHOICE%"=="M" (SET "OPERATION=MODIFYDATABASE" & SET "RUNMODE=NORMAL" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 210 | IF /I "%CHOICE%"=="T" (SET "OPERATION=MODIFYDATABASE" & SET "RUNMODE=TEST" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 211 | IF /I "%CHOICE%"=="1" (SET "OPERATION=SWITCHDATABASE" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 212 | IF /I "%CHOICE%"=="2" (SET "OPERATION=SWITCHAPPXLIST" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 213 | IF /I "%CHOICE%"=="3" (SET "OPERATION=SWITCHAPPXDUMP" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 214 | IF /I "%CHOICE%"=="4" (SET "OPERATION=SWITCHBKPFOLDR" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 215 | IF /I "%CHOICE%"=="R" (SET "OPERATION=RESTOREDEFAULT" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO CHOICE_!OPERATION!) 216 | ECHO. 217 | ECHO ERROR: Invalid Argument^^! 218 | ECHO. 219 | ECHO "%CHOICE%" is not a valid Option^^! 220 | ECHO Please select one of the following Options [B/D/M/T/1-4/R/Q]. 221 | ECHO. 222 | PAUSE 223 | VERIFY >NUL 224 | GOTO MAINMENU 225 | 226 | REM ########################################################################################################### 227 | 228 | :CHOICE_BACKUPDATABASE 229 | 230 | REM ### Backup all Appx-Database Files (*.srd*) ### 231 | CLS 232 | ECHO %TITLE% 233 | ECHO. 234 | SET ERRORCODE=0 235 | SET CHOICE= 236 | SET APPX_BACKUPMAINPATH= 237 | ECHO Backup all Appx-Database Files (*.srd*) 238 | ECHO. 239 | ECHO A Backup Copy of all relevant Appx-Database Files (*.srd*) within the currently 240 | ECHO selected Appx-Database Directory will be create at the following Location. 241 | ECHO. 242 | ECHO Appx-Database File : [%APPX_DATABASEPATH%] 243 | ECHO Backup-Directory : [%APPX_BACKUPBASEPATH%] 244 | ECHO. 245 | SET /P "CHOICE=Do you wish to continue? [Y]/[N] (N): " 246 | IF NOT %ERRORLEVEL%==0 (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 247 | IF NOT DEFINED CHOICE (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 248 | IF /I "%CHOICE%"=="N" (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 249 | IF /I "%CHOICE%"=="Y" (VERIFY >NUL & GOTO CHOICE_BACKUPDATABASE_CONTINUE) 250 | ECHO. 251 | ECHO ERROR: Invalid Argument^^! 252 | ECHO. 253 | ECHO "%CHOICE%" is not a valid Option^^! 254 | ECHO Please select one of the following Options [Y/N]. 255 | ECHO. 256 | PAUSE 257 | VERIFY >NUL 258 | GOTO CHOICE_BACKUPDATABASE 259 | 260 | :CHOICE_BACKUPDATABASE_CONTINUE 261 | 262 | REM ### Create Backup of the current Appx-DB ### 263 | ECHO. 264 | ECHO Creating Backup of the current Appx-DB... 265 | SET "APPX_BACKUPMAINPATH=%APPX_BACKUPTIMESTAMP%" & SET "APPX_BACKUPMAINPATH=!APPX_BACKUPBASEPATH!\AppxDB_!APPX_BACKUPMAINPATH: =0!" 266 | MKDIR "%APPX_BACKUPMAINPATH%" %ERRORHANDLER% 267 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=MKDIR" & GOTO ERROR) 268 | XCOPY "%APPX_DATABASEPATH%\..\*.srd*" "%APPX_BACKUPMAINPATH%" /C /I /Q /H /R /Y %ERRORHANDLER% 269 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=XCOPY" & GOTO ERROR) 270 | ECHO Backup successfully created at: [%APPX_BACKUPMAINPATH%] 271 | 272 | SET CHOICE= 273 | SET APPX_BACKUPMAINPATH= 274 | SET ERRORCODE=0 275 | VERIFY >NUL 276 | GOTO FINISH 277 | 278 | REM ########################################################################################################### 279 | 280 | :CHOICE_EXPORTAPPXLIST 281 | 282 | REM ### Dump Package List from Appx-Database into a Text File ### 283 | CLS 284 | ECHO %TITLE% 285 | ECHO. 286 | SET ERRORCODE=0 287 | SET CHOICE= 288 | SET /A STEPINDEX=0 289 | SET /A SUBSTEPINDEX=0 290 | ECHO Dump Package List from Appx-Database into a Text File 291 | ECHO. 292 | ECHO A List of all Packages in the Appx-Database and thier respective Configuration 293 | ECHO will be exported into a Text File at the following Location. 294 | ECHO. 295 | ECHO Appx-Package Dump: [%APPX_PACKAGEDUMP%] 296 | ECHO. 297 | SET /P "CHOICE=Do you wish to continue? [Y]/[N] (N): " 298 | IF NOT %ERRORLEVEL%==0 (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 299 | IF NOT DEFINED CHOICE (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 300 | IF /I "%CHOICE%"=="N" (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 301 | IF /I "%CHOICE%"=="Y" (VERIFY >NUL & GOTO CHOICE_EXPORTAPPXLIST_CONTINUE) 302 | ECHO. 303 | ECHO ERROR: Invalid Argument^^! 304 | ECHO. 305 | ECHO "%CHOICE%" is not a valid Option^^! 306 | ECHO Please select one of the following Options [Y/N]. 307 | ECHO. 308 | PAUSE 309 | VERIFY >NUL 310 | GOTO CHOICE_EXPORTAPPXLIST 311 | 312 | :CHOICE_EXPORTAPPXLIST_CONTINUE 313 | 314 | REM ### Create Package-Dump from Appx-DB ### 315 | ECHO. 316 | SET /A STEPINDEX=%STEPINDEX%+1 317 | ECHO %STEPINDEX%. Creating Package-Dump from Appx-DB... 318 | DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 319 | VERIFY >NUL 320 | %RUNASSYSTEM% ""%SQLITE%" "%APPX_DATABASEPATH%" < "%SQL_EXPORTPACKAGELIST%" > "%APPX_PACKAGEDUMP_TEMP%"" %ERRORHANDLER% 321 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=SQLITE" & GOTO ERROR) 322 | %CMDSYNCWAIT% %SQL_SYNCTIME% %ERRORHANDLER% 323 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=NIRCMD" & GOTO ERROR) 324 | TASKLIST | FINDSTR /I /L /C:"NIRCMD.EXE" /C:"SQLITE.EXE" >NUL 2>&1 325 | IF %ERRORLEVEL%==0 (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSYNC" & SET "ERRORSOURCE=SQL-Tasks out of Sync" & GOTO ERROR) 326 | VERIFY >NUL 327 | ECHO SQL-Transactions completed successfully. 328 | 329 | REM ### Export Package-List to Target Folder ### 330 | ECHO. 331 | SET /A STEPINDEX=%STEPINDEX%+1 332 | ECHO %STEPINDEX%. Exporting Package-List to Target Folder... 333 | IF EXIST "%APPX_PACKAGEDUMP_TEMP%" ( 334 | XCOPY "%APPX_PACKAGEDUMP_TEMP%" "%APPX_PACKAGEDUMP%*" /C /I /Q /H /R /Y %ERRORHANDLER% 335 | IF NOT !ERRORLEVEL!==0 (SET "ERRORCODE=!ERRORLEVEL!" & SET "ERRORMODULE=XCOPY" & GOTO ERROR) 336 | ) ELSE ( 337 | SET ERRORCODE=1 338 | SET ERRORMODULE=SQLSCRIPT 339 | SET ERRORSOURCE=Appx-Package Dump not found 340 | GOTO ERROR 341 | ) 342 | 343 | DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 344 | VERIFY >NUL 345 | ECHO Dump successfully created at: [%APPX_PACKAGEDUMP%] 346 | ECHO. 347 | ECHO All Packages have been Exported successfully. 348 | 349 | SET CHOICE= 350 | SET /A STEPINDEX=0 351 | SET /A SUBSTEPINDEX=0 352 | SET ERRORCODE=0 353 | VERIFY >NUL 354 | GOTO FINISH 355 | 356 | REM ########################################################################################################### 357 | 358 | :CHOICE_MODIFYDATABASE 359 | 360 | REM ### Modify Appx-Database to change the Protection of Packages or Run in Test-Mode ### 361 | CLS 362 | ECHO %TITLE% 363 | ECHO. 364 | SET ERRORCODE=0 365 | SET CHOICE= 366 | SET /A STEPINDEX=0 367 | SET /A SUBSTEPINDEX=0 368 | SET BREAK_A= 369 | SET BREAK_B= 370 | SET APPX_BACKUPMAINPATH= 371 | SET APPX_PARAMOK=FALSE 372 | SET APPX_PACKAGENAME= 373 | SET APPX_ISINBOX= 374 | SET APPX_ISINBOX_DUMP= 375 | SET APPX_DATABASEOK=FALSE 376 | SET SQL_FILESOK=FALSE 377 | 378 | IF %RUNMODE%==NORMAL ( 379 | ECHO Modify Appx-Database to change the Protection of Packages 380 | ECHO. 381 | ECHO WARNING: In the following Process the Appx-Database of Windows will be modified. 382 | ECHO A Backup of all relevant Files will be created. If anything goes wrong, 383 | ECHO you should shut down your PC immediately, and restore the damaged Files 384 | ECHO with those from the Backup, otherwise your Operating System will become 385 | ECHO damaged^^!^^!^^!  386 | ECHO.   387 | ECHO You may have to replace damaged Files offline, because they are openend 388 | ECHO and locked by Windows while running.  389 | ECHO.   390 | ECHO I will not take any Responsibilities for Problems or damaged Systems in 391 | ECHO any Case. It is up to you if you want to use this Software.  392 | ECHO. 393 | ) ELSE ( 394 | ECHO Test-Mode: Only create SQL-File without altering the Database 395 | ECHO. 396 | ECHO INFO: In the following Process a Test Run ist started to test the Modification 397 | ECHO of the Appx-Database. The Database itself will not be modified. Only the 398 | ECHO necesseray dynamic SQL-File^(s^) will be generated and can then be checked 399 | ECHO for correctness afterwards.  400 | ECHO.   401 | ECHO I will not take any Responsibilities for Problems or damaged Systems in  402 | ECHO any Case. It is up to you if you want to use this Software.  403 | ECHO. 404 | ) 405 | 406 | SET /P "CHOICE=Do you wish to continue? [Y]/[N] (N): " 407 | IF NOT %ERRORLEVEL%==0 (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 408 | IF NOT DEFINED CHOICE (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 409 | IF /I "%CHOICE%"=="N" (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 410 | IF /I "%CHOICE%"=="Y" (VERIFY >NUL & GOTO CHOICE_MODIFYDATABASE_CONTINUE) 411 | ECHO. 412 | ECHO ERROR: Invalid Argument^^! 413 | ECHO. 414 | ECHO "%CHOICE%" is not a valid Option^^! 415 | ECHO Please select one of the following Options [Y/N]. 416 | ECHO. 417 | PAUSE 418 | VERIFY >NUL 419 | GOTO CHOICE_MODIFYDATABASE 420 | 421 | :CHOICE_MODIFYDATABASE_CONTINUE 422 | 423 | REM ### Prepare SQL-Script Environment ### 424 | ECHO. 425 | SET /A STEPINDEX=%STEPINDEX%+1 426 | ECHO %STEPINDEX%. Preparing SQL-Script Environment... 427 | DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 428 | DEL /A /F /Q "%SQL_BUILDSQLSTATEMENTS_TEMP%" >NUL 2>&1 429 | DEL /A /F /Q "%SQL_DROPTRIGGERS_TEMP%" >NUL 2>&1 430 | DEL /A /F /Q "%SQL_CREATETRIGGERS_TEMP%" >NUL 2>&1 431 | DEL /A /F /Q "%SQL_MODIFYAPPXDB_TEMP%" >NUL 2>&1 432 | DEL /A /F /Q "%SQL_RESULTSCRIPT%" >NUL 2>&1 433 | ECHO Operation completed successfully. 434 | VERIFY >NUL 435 | 436 | IF %RUNMODE%==TEST (GOTO MODIFYDATABASE_SKIPBACKUP) 437 | 438 | REM ### Create Backup of the current Appx-DB ### 439 | ECHO. 440 | SET /A STEPINDEX=%STEPINDEX%+1 441 | ECHO %STEPINDEX%. Creating Backup of the current Appx-DB... 442 | SET "APPX_BACKUPMAINPATH=%APPX_BACKUPTIMESTAMP%" & SET "APPX_BACKUPMAINPATH=!APPX_BACKUPBASEPATH!\AppxDB_!APPX_BACKUPMAINPATH: =0!" 443 | MKDIR "%APPX_BACKUPMAINPATH%" %ERRORHANDLER% 444 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=MKDIR" & GOTO ERROR) 445 | XCOPY "%APPX_DATABASEPATH%\..\*.srd*" "%APPX_BACKUPMAINPATH%" /C /I /Q /H /R /Y %ERRORHANDLER% 446 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=XCOPY" & GOTO ERROR) 447 | ECHO Backup successfully created at: [%APPX_BACKUPMAINPATH%] 448 | 449 | :MODIFYDATABASE_SKIPBACKUP 450 | 451 | REM ### Copy temporary SQL-Export Script Files ### 452 | ECHO. 453 | SET /A STEPINDEX=%STEPINDEX%+1 454 | ECHO %STEPINDEX%. Copying temporary SQL-Export Script Files... 455 | XCOPY "%SQL_BUILDSQLSTATEMENTS_ORIG%" "%SQL_BUILDSQLSTATEMENTS_TEMP%*" /C /I /Q /H /R /Y %ERRORHANDLER% 456 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=XCOPY" & GOTO ERROR) 457 | "%FART%" -i -q "%SQL_BUILDSQLSTATEMENTS_TEMP%" "[DropTriggers]" "%SQL_DROPTRIGGERS_TEMP:\=/%" >NUL 2>&1 458 | "%FART%" -i -q "%SQL_BUILDSQLSTATEMENTS_TEMP%" "[CreateTriggers]" "%SQL_CREATETRIGGERS_TEMP:\=/%" >NUL 2>&1 459 | VERIFY >NUL 460 | ECHO Operation completed successfully. 461 | 462 | REM ### Create Backup of Triggers and Statements from Appx-DB ### 463 | ECHO. 464 | SET /A STEPINDEX=%STEPINDEX%+1 465 | ECHO %STEPINDEX%. Creating Backup of Triggers and Statements from Appx-DB. Please wait... 466 | %RUNASSYSTEM% ""%SQLITE%" "%APPX_DATABASEPATH%" < "%SQL_BUILDSQLSTATEMENTS_TEMP%"" %ERRORHANDLER% 467 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=SQLITE" & GOTO ERROR) 468 | %CMDSYNCWAIT% %SQL_SYNCTIME% %ERRORHANDLER% 469 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=NIRCMD" & GOTO ERROR) 470 | TASKLIST | FINDSTR /I /L /C:"NIRCMD.EXE" /C:"SQLITE.EXE" >NUL 2>&1 471 | IF %ERRORLEVEL%==0 (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSYNC" & SET "ERRORSOURCE=SQL-Tasks out of Sync" & GOTO ERROR) 472 | VERIFY >NUL 473 | SET SQL_FILESOK=TRUE 474 | IF NOT EXIST "%SQL_DROPTRIGGERS_TEMP%" SET SQL_FILESOK=FALSE 475 | IF NOT EXIST "%SQL_CREATETRIGGERS_TEMP%" SET SQL_FILESOK=FALSE 476 | IF %SQL_FILESOK%==FALSE (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSCRIPT" & SET "ERRORSOURCE=SQL-File(s) not created" & GOTO ERROR) 477 | ECHO SQL-Transactions completed successfully. 478 | 479 | REM ### Build new dynamic SQL-Script to update the Appx-DB ### 480 | ECHO. 481 | SET /A STEPINDEX=%STEPINDEX%+1 482 | ECHO %STEPINDEX%. Building new dynamic SQL-Script to update the Appx-DB... 483 | REM ### Insert Header Text into the new SQL Script ### 484 | IF EXIST "%RES_SQL_HEADERTEXT%" ( 485 | TYPE "%RES_SQL_HEADERTEXT%" > "%SQL_MODIFYAPPXDB_TEMP%" 486 | IF NOT !ERRORLEVEL!==0 (SET "ERRORCODE=!ERRORLEVEL!" & SET "ERRORMODULE=TYPE" & SET "ERRORSOURCE=TYPE" & GOTO ERROR) 487 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 488 | ) ELSE ( 489 | SET ERRORCODE=1 490 | SET ERRORMODULE=MAIN 491 | SET ERRORSOURCE=Resource File missing 492 | ECHO. 493 | ECHO ERROR: Resource File not found^^! 494 | ECHO. 495 | ECHO The Resource File "%RES_SQL_HEADERTEXT%" 496 | ECHO is missing^^! Please check your Installation Source or redownload the Script. 497 | GOTO ERROR 498 | ) 499 | 500 | REM ### Insert previously generated SQL-Script to drop Triggers into the new SQL-Script ### 501 | IF EXIST "%SQL_DROPTRIGGERS_TEMP%" ( 502 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 503 | ECHO -- Temporarily Drop all Triggers from the Appx Database to avoid Errors>>"%SQL_MODIFYAPPXDB_TEMP%" 504 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 505 | TYPE "%SQL_DROPTRIGGERS_TEMP%" >> "%SQL_MODIFYAPPXDB_TEMP%" 506 | IF NOT !ERRORLEVEL!==0 (SET "ERRORCODE=!ERRORLEVEL!" & SET "ERRORMODULE=TYPE" & SET "ERRORSOURCE=TYPE" & GOTO ERROR) 507 | ) ELSE ( 508 | SET ERRORCODE=1 509 | SET ERRORMODULE=SQLSCRIPT 510 | SET ERRORSOURCE=SQL-DropTriggers Script not found 511 | ECHO. 512 | ECHO ERROR: SQL-DropTriggers Script not found^^! 513 | ECHO. 514 | ECHO The SQL-Script "%SQL_DROPTRIGGERS_TEMP%" 515 | ECHO is missing or could not be created by the Script^^! 516 | GOTO ERROR 517 | ) 518 | 519 | REM ### Parse Packagelist and insert Update Statement for each Package into the new SQL-Script ### 520 | IF EXIST "%APPX_PACKAGELIST%" ( 521 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 522 | ECHO -- Update the IsInbox Values in the Package Table to lock or unlock Appx Packages>>"%SQL_MODIFYAPPXDB_TEMP%" 523 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 524 | FOR /F "usebackq tokens=* delims=" %%A IN ("%APPX_PACKAGELIST%") DO ( 525 | ECHO %%A|FINDSTR /I /L /C:"#" >NUL 2>&1 526 | IF NOT !ERRORLEVEL!==0 ( 527 | VERIFY >NUL 528 | SET APPX_PARAMOK=TRUE 529 | SET APPX_PACKAGENAME= 530 | SET APPX_ISINBOX= 531 | FOR /F "tokens=1,2 delims==" %%B IN ("%%A") DO (SET "APPX_PACKAGENAME=%%B" & SET "APPX_ISINBOX=%%C") 532 | IF NOT DEFINED APPX_PACKAGENAME SET APPX_PARAMOK=FALSE 533 | IF NOT DEFINED APPX_ISINBOX SET APPX_PARAMOK=FALSE 534 | IF !APPX_PARAMOK!==FALSE (SET "ERRORCODE=1" & SET "ERRORMODULE=APPXLIST" & SET "ERRORSOURCE=Parsing Error in Appx-Package List" & GOTO ERROR) 535 | ECHO UPDATE Package SET IsInbox=!APPX_ISINBOX! WHERE PackageFullName LIKE "%%!APPX_PACKAGENAME!%%";>>"%SQL_MODIFYAPPXDB_TEMP%" 536 | ) 537 | ) 538 | ) ELSE ( 539 | SET ERRORCODE=1 540 | SET ERRORMODULE=APPXLIST 541 | SET ERRORSOURCE=Appx-Package List not found 542 | ECHO. 543 | ECHO ERROR: Appx-Package List not found^^! 544 | ECHO. 545 | ECHO The Appx-Package List "%APPX_PACKAGELIST%" 546 | ECHO could not be found^^! 547 | GOTO ERROR 548 | ) 549 | 550 | REM ### Insert previously generated SQL-Script to recreate Triggers into the new SQL-Script ### 551 | IF EXIST "%SQL_CREATETRIGGERS_TEMP%" ( 552 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 553 | ECHO -- Recreate all Triggers of the Appx Database>>"%SQL_MODIFYAPPXDB_TEMP%" 554 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 555 | TYPE "%SQL_CREATETRIGGERS_TEMP%" >> "%SQL_MODIFYAPPXDB_TEMP%" 556 | IF NOT !ERRORLEVEL!==0 (SET "ERRORCODE=!ERRORLEVEL!" & SET "ERRORMODULE=TYPE" & SET "ERRORSOURCE=TYPE" & GOTO ERROR) 557 | ) ELSE ( 558 | SET ERRORCODE=1 559 | SET ERRORMODULE=SQLSCRIPT 560 | SET ERRORSOURCE=SQL-CreateTriggers Script not found 561 | ECHO. 562 | ECHO ERROR: SQL-CreateTriggers Script not found^^! 563 | ECHO. 564 | ECHO The SQL-Script "%SQL_CREATETRIGGERS_TEMP%" 565 | ECHO is missing or could not be created by the Script^^! 566 | GOTO ERROR 567 | ) 568 | 569 | REM ### Insert Statement to save the modified Appx-DB into the new SQL-Script ### 570 | ECHO.>>"%SQL_MODIFYAPPXDB_TEMP%" 571 | ECHO .save "%APPX_DATABASEPATH:\=/%">>"%SQL_MODIFYAPPXDB_TEMP%" 572 | IF NOT EXIST "%SQL_MODIFYAPPXDB_TEMP%" (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSCRIPT" & SET "ERRORSOURCE=SQL-File(s) not created" & GOTO ERROR) 573 | ECHO Operation completed successfully. 574 | 575 | REM ### Copy generated SQL-Script to Working Directory ### 576 | ECHO. 577 | SET /A STEPINDEX=%STEPINDEX%+1 578 | ECHO %STEPINDEX%. Copying generated SQL-Script to Working Directory... 579 | XCOPY "%SQL_MODIFYAPPXDB_TEMP%" "%SQL_RESULTSCRIPT%*" /C /I /Q /H /R /Y %ERRORHANDLER% 580 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=XCOPY" & GOTO ERROR) 581 | ECHO Script Copy successfully generated at: [%SQL_RESULTSCRIPT%] 582 | 583 | IF %RUNMODE%==TEST (GOTO MODIFYDATABASE_SKIPMODIFICATION) 584 | 585 | REM ### Update Packages in Appx-Database ### 586 | ECHO. 587 | SET /A STEPINDEX=%STEPINDEX%+1 588 | ECHO %STEPINDEX%. Updating Packages in Appx-Database. Please wait... 589 | %RUNASSYSTEM% ""%SQLITE%" "%APPX_DATABASEPATH%" < "%SQL_MODIFYAPPXDB_TEMP%"" %ERRORHANDLER% 590 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=SQLITE" & GOTO ERROR) 591 | %CMDSYNCWAIT% %SQL_SYNCTIME% %ERRORHANDLER% 592 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=NIRCMD" & GOTO ERROR) 593 | TASKLIST | FINDSTR /I /L /C:"NIRCMD.EXE" /C:"SQLITE.EXE" >NUL 2>&1 594 | IF %ERRORLEVEL%==0 (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSYNC" & SET "ERRORSOURCE=SQL-Tasks out of Sync" & GOTO ERROR) 595 | VERIFY >NUL 596 | ECHO SQL-Transactions completed successfully. 597 | 598 | REM ### Verify Database Contents ### 599 | ECHO. 600 | SET /A STEPINDEX=%STEPINDEX%+1 601 | SET /A SUBSTEPINDEX=0 602 | ECHO %STEPINDEX%. Verifying Database Contents. Please wait... 603 | REM ### Export Package-List from Appx-DB ### 604 | ECHO. 605 | SET /A SUBSTEPINDEX=%SUBSTEPINDEX%+1 606 | ECHO %STEPINDEX%.%SUBSTEPINDEX% Exporting Package-List from Appx-DB... 607 | %RUNASSYSTEM% ""%SQLITE%" "%APPX_DATABASEPATH%" < "%SQL_EXPORTPACKAGELIST%" > "%APPX_PACKAGEDUMP_TEMP%"" %ERRORHANDLER% 608 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=SQLITE" & GOTO ERROR) 609 | %CMDSYNCWAIT% %SQL_SYNCTIME% %ERRORHANDLER% 610 | IF NOT %ERRORLEVEL%==0 (SET "ERRORCODE=%ERRORLEVEL%" & SET "ERRORMODULE=NIRCMD" & GOTO ERROR) 611 | TASKLIST | FINDSTR /I /L /C:"NIRCMD.EXE" /C:"SQLITE.EXE" >NUL 2>&1 612 | IF %ERRORLEVEL%==0 (SET "ERRORCODE=1" & SET "ERRORMODULE=SQLSYNC" & SET "ERRORSOURCE=SQL-Tasks out of Sync" & GOTO ERROR) 613 | VERIFY >NUL 614 | ECHO SQL-Transactions completed successfully. 615 | 616 | REM ### Check updated Values in Appx-Database ### 617 | ECHO. 618 | SET /A SUBSTEPINDEX=%SUBSTEPINDEX%+1 619 | ECHO %STEPINDEX%.%SUBSTEPINDEX% Checking updated Values in Appx-Database... 620 | SET APPX_DATABASEOK=TRUE 621 | IF EXIST "%APPX_PACKAGELIST%" ( 622 | IF EXIST "%APPX_PACKAGEDUMP_TEMP%" ( 623 | SET BREAK_A= 624 | SET BREAK_B= 625 | FOR /F "usebackq tokens=* delims=" %%A IN ("%APPX_PACKAGELIST%") DO ( 626 | IF NOT DEFINED BREAK_A ( 627 | ECHO %%A|FINDSTR /I /L /C:"#" >NUL 2>&1 628 | IF NOT !ERRORLEVEL!==0 ( 629 | VERIFY >NUL 630 | SET APPX_PARAMOK=TRUE 631 | SET APPX_PACKAGENAME= 632 | SET APPX_ISINBOX= 633 | FOR /F "tokens=1,2 delims==" %%B IN ("%%A") DO (SET "APPX_PACKAGENAME=%%B" & SET "APPX_ISINBOX=%%C") 634 | IF NOT DEFINED APPX_PACKAGENAME SET APPX_PARAMOK=FALSE 635 | IF NOT DEFINED APPX_ISINBOX SET APPX_PARAMOK=FALSE 636 | IF !APPX_PARAMOK!==FALSE (SET "APPX_DATABASEOK=FALSE" & SET "ERRORCODE=1" & SET "ERRORMODULE=APPXLIST" & SET "ERRORSOURCE=Parsing Error in Appx-Package List" & GOTO ERROR) 637 | SET APPX_ISINBOX_DUMP= 638 | SET BREAK_B= 639 | FOR /F "tokens=2 delims= " %%B IN ('FINDSTR /I /L /C:"!APPX_PACKAGENAME!" "%APPX_PACKAGEDUMP_TEMP%" 2^>NUL') DO ( 640 | IF NOT DEFINED BREAK_B ( 641 | SET APPX_ISINBOX_DUMP=%%B 642 | IF NOT DEFINED APPX_ISINBOX_DUMP SET "APPX_DATABASEOK=FALSE" & SET "ERRORCODE=1" & SET "ERRORMODULE=APPXDUMP" & SET "ERRORSOURCE=Parsing Error in Appx-Package Dump" & GOTO ERROR 643 | IF !APPX_ISINBOX_DUMP! NEQ !APPX_ISINBOX! ( 644 | SET APPX_DATABASEOK=FALSE 645 | SET BREAK_A=TRUE 646 | SET BREAK_B=TRUE 647 | ) 648 | ) 649 | ) 650 | IF %SCRIPT_IGNOREMISSINGPKG%==FALSE ( 651 | IF NOT DEFINED APPX_ISINBOX_DUMP SET "APPX_DATABASEOK=FALSE" & SET "ERRORCODE=1" & SET "ERRORMODULE=APPXDUMP" & SET "ERRORSOURCE=Package not found in Appx-Package Dump" & GOTO ERROR 652 | ) 653 | ) 654 | ) 655 | ) 656 | ) ELSE ( 657 | SET APPX_DATABASEOK=FALSE 658 | SET ERRORCODE=1 659 | SET ERRORMODULE=SQLSCRIPT 660 | SET ERRORSOURCE=Appx-Package Dump not found 661 | GOTO ERROR 662 | ) 663 | ) ELSE ( 664 | SET APPX_DATABASEOK=FALSE 665 | SET ERRORCODE=1 666 | SET ERRORMODULE=SQLSCRIPT 667 | SET ERRORSOURCE=Appx-Package List not found 668 | GOTO ERROR 669 | ) 670 | 671 | IF %APPX_DATABASEOK%==TRUE ( 672 | ECHO Updated Values have been verified successfully. 673 | ECHO. 674 | ECHO All configured Packages have been Updated successfully. 675 | ) ELSE ( 676 | ECHO Updated Values do not match the Configuration. 677 | ECHO. 678 | ECHO WARNING: One or more Packages haven't been Updated correctly. Your System may be 679 | ECHO in an undefined State. To prevent further damages you should shut down 680 | ECHO your System immediately. You could restore the Appx-Database offline by 681 | ECHO booting into Windows Recovery Environment Console and copying all Files 682 | ECHO from the Backup Directory to the following Location:  683 | ECHO   684 | ECHO. %%ProgramData%%\Microsoft\Windows\AppRepository  685 | ECHO   686 | ECHO The easiest Way to get into Windows Recovery Environment Console, is to 687 | ECHO click "Reboot" in the Start-Menu while holding down the SHIFT Key. You 688 | ECHO are being led to a Selection Screen, where you have to select "Trouble- 689 | ECHO shooting" -> "Advanced Options" -> "Command Prompt". You have to select 690 | ECHO a User Account with Admin-Rights to enter the Console. Find out, which 691 | ECHO Drive Letter corresponds to the Windows-Partition, and which one to the 692 | ECHO Partition containing your Backup Files. Then invoke this Command:  693 | ECHO   694 | ECHO XCOPY "X:\...\Backup\*.*" "Y:\ProgramData\...\AppRepository" /H /R /Y  695 | ECHO.   696 | ECHO X: Drive-Letter of the Partition containing the Backup Files  697 | ECHO Y: Drive-Letter of the Windows Partition containing the Appx-Database  698 | ECHO.   699 | ECHO. After you have successfully restored the Database Files, reboot System. 700 | ) 701 | 702 | :MODIFYDATABASE_SKIPMODIFICATION 703 | 704 | REM ### Reset SQL-Script Environment ### 705 | ECHO. 706 | SET /A STEPINDEX=%STEPINDEX%+1 707 | ECHO %STEPINDEX%. Resetting SQL-Script Environment... 708 | DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 709 | DEL /A /F /Q "%SQL_BUILDSQLSTATEMENTS_TEMP%" >NUL 2>&1 710 | DEL /A /F /Q "%SQL_DROPTRIGGERS_TEMP%" >NUL 2>&1 711 | DEL /A /F /Q "%SQL_CREATETRIGGERS_TEMP%" >NUL 2>&1 712 | DEL /A /F /Q "%SQL_MODIFYAPPXDB_TEMP%" >NUL 2>&1 713 | ECHO Operation completed successfully. 714 | VERIFY >NUL 715 | 716 | SET CHOICE= 717 | SET /A STEPINDEX=0 718 | SET /A SUBSTEPINDEX=0 719 | SET BREAK_A= 720 | SET BREAK_B= 721 | SET APPX_BACKUPMAINPATH= 722 | SET APPX_PARAMOK=FALSE 723 | SET APPX_PACKAGENAME= 724 | SET APPX_ISINBOX= 725 | SET APPX_ISINBOX_DUMP= 726 | SET APPX_DATABASEOK=FALSE 727 | SET SQL_FILESOK=FALSE 728 | SET ERRORCODE=0 729 | VERIFY >NUL 730 | GOTO FINISH 731 | 732 | REM ########################################################################################################### 733 | 734 | :CHOICE_SWITCHDATABASE 735 | 736 | REM ### Select another Appx-Database File ### 737 | CLS 738 | ECHO %TITLE% 739 | ECHO. 740 | SET ERRORCODE=0 741 | SET APPX_DATABASEPATH_NEW= 742 | ECHO Select another Appx-Database File 743 | ECHO. 744 | ECHO Please specify the Path to the Appx Deployment Database File. 745 | ECHO You may keep the Default File Path by just Pressing ENTER. 746 | ECHO. 747 | ECHO You can either enter the Path manually or Drag ^& Drop the 748 | ECHO File to this Window. Please use Double Quotes if the Path 749 | ECHO contains Spaces. 750 | ECHO. 751 | ECHO Current Database File : [%APPX_DATABASEPATH%] 752 | SET /P "APPX_DATABASEPATH_NEW=New Database File : " 753 | IF NOT %ERRORLEVEL%==0 (SET "APPX_DATABASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 754 | IF NOT DEFINED APPX_DATABASEPATH_NEW (SET "APPX_DATABASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 755 | SET APPX_DATABASEPATH_NEW=%APPX_DATABASEPATH_NEW:"=% 756 | IF NOT DEFINED APPX_DATABASEPATH_NEW (SET "APPX_DATABASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 757 | IF /I "%APPX_DATABASEPATH_NEW%"=="%APPX_DATABASEPATH%" (SET "APPX_DATABASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 758 | IF EXIST "%APPX_DATABASEPATH_NEW%" (SET "APPX_DATABASEPATH=%APPX_DATABASEPATH_NEW%" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 759 | ECHO. 760 | ECHO ERROR: File not found^^! 761 | ECHO. 762 | ECHO "%APPX_DATABASEPATH_NEW%" 763 | ECHO. 764 | ECHO The specified File does not exist^^! 765 | ECHO Please specify a proper File Path. 766 | ECHO. 767 | PAUSE 768 | VERIFY >NUL 769 | GOTO CHOICE_SWITCHDATABASE 770 | 771 | REM ########################################################################################################### 772 | 773 | :CHOICE_SWITCHAPPXLIST 774 | 775 | REM ### Select another Appx-Package List File ### 776 | CLS 777 | ECHO %TITLE% 778 | ECHO. 779 | SET ERRORCODE=0 780 | SET APPX_PACKAGELIST_NEW= 781 | ECHO Select another Appx-Package List File 782 | ECHO. 783 | ECHO Please specify the Path to the Package Manipulation List. 784 | ECHO You may keep the Default File Path by just Pressing ENTER. 785 | ECHO. 786 | ECHO You can either enter the Path manually or Drag ^& Drop the 787 | ECHO File to this Window. Please use Double Quotes if the Path 788 | ECHO contains Spaces. 789 | ECHO. 790 | ECHO Current Package List File : [%APPX_PACKAGELIST%] 791 | SET /P "APPX_PACKAGELIST_NEW=New Package List File : " 792 | IF NOT %ERRORLEVEL%==0 (SET "APPX_PACKAGELIST_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 793 | IF NOT DEFINED APPX_PACKAGELIST_NEW (SET "APPX_PACKAGELIST_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 794 | SET APPX_PACKAGELIST_NEW=%APPX_PACKAGELIST_NEW:"=% 795 | IF NOT DEFINED APPX_PACKAGELIST_NEW (SET "APPX_PACKAGELIST_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 796 | IF /I "%APPX_PACKAGELIST_NEW%"=="%APPX_PACKAGELIST%" (SET "APPX_PACKAGELIST_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 797 | IF EXIST "%APPX_PACKAGELIST_NEW%" (SET "APPX_PACKAGELIST=%APPX_PACKAGELIST_NEW%" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 798 | ECHO. 799 | ECHO ERROR: File not found^^! 800 | ECHO. 801 | ECHO "%APPX_PACKAGELIST_NEW%" 802 | ECHO. 803 | ECHO The specified File does not exist^^! 804 | ECHO Please specify a proper File Path. 805 | ECHO. 806 | PAUSE 807 | VERIFY >NUL 808 | GOTO CHOICE_SWITCHAPPXLIST 809 | 810 | REM ########################################################################################################### 811 | 812 | :CHOICE_SWITCHAPPXDUMP 813 | 814 | REM ### Select another Appx-Package Dump File ### 815 | CLS 816 | ECHO %TITLE% 817 | ECHO. 818 | SET ERRORCODE=0 819 | SET APPX_PACKAGEDUMP_NEW= 820 | SET CHOICE= 821 | ECHO Select another Appx-Package Dump File 822 | ECHO. 823 | ECHO Please specify the Path for the Package Dump Export List. 824 | ECHO You may keep the Default File Path by just Pressing ENTER. 825 | ECHO. 826 | ECHO You can either enter the Path manually or Drag ^& Drop the 827 | ECHO File to this Window. Please use Double Quotes if the Path 828 | ECHO contains Spaces. 829 | ECHO. 830 | ECHO If the File already exists it will be overwritten when a 831 | ECHO Dump is created. 832 | ECHO. 833 | ECHO Current Package Dump File : [%APPX_PACKAGEDUMP%] 834 | SET /P "APPX_PACKAGEDUMP_NEW=New Package Dump File : " 835 | IF NOT %ERRORLEVEL%==0 (SET "APPX_PACKAGEDUMP_NEW=" & SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 836 | IF NOT DEFINED APPX_PACKAGEDUMP_NEW (SET "APPX_PACKAGEDUMP_NEW=" & SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 837 | SET APPX_PACKAGEDUMP_NEW=%APPX_PACKAGEDUMP_NEW:"=% 838 | IF NOT DEFINED APPX_PACKAGEDUMP_NEW (SET "APPX_PACKAGEDUMP_NEW=" & SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 839 | IF /I "%APPX_PACKAGEDUMP_NEW%"=="%APPX_PACKAGEDUMP%" (SET "APPX_PACKAGEDUMP_NEW=" & SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 840 | 841 | :CHOICE_SWITCHAPPXDUMP_OVERWRITE 842 | 843 | SET ERRORCODE=0 844 | SET CHOICE= 845 | IF EXIST "%APPX_PACKAGEDUMP_NEW%" ( 846 | ECHO. 847 | ECHO WARNING: The File you specified already exists 848 | ECHO and will be overwritten^^! 849 | ECHO. 850 | SET /P "CHOICE=Do you wish to continue? [Y]/[N] (N): " 851 | IF NOT !ERRORLEVEL!==0 (VERIFY >NUL & GOTO CHOICE_SWITCHAPPXDUMP) 852 | IF NOT DEFINED CHOICE VERIFY >NUL & GOTO CHOICE_SWITCHAPPXDUMP 853 | IF /I "!CHOICE!"=="N" (VERIFY >NUL & GOTO CHOICE_SWITCHAPPXDUMP) 854 | IF /I "!CHOICE!"=="Y" (VERIFY >NUL & GOTO CHOICE_SWITCHAPPXDUMP_CONTINUE) 855 | ECHO. 856 | ECHO ERROR: Invalid Argument^^! 857 | ECHO. 858 | ECHO "!CHOICE!" is not a valid Option^^! 859 | ECHO Please select one of the following Options [Y/N]. 860 | ECHO. 861 | PAUSE 862 | ECHO                          863 | VERIFY >NUL 864 | GOTO CHOICE_SWITCHAPPXDUMP_OVERWRITE 865 | ) 866 | 867 | :CHOICE_SWITCHAPPXDUMP_CONTINUE 868 | 869 | SET APPX_PACKAGEDUMP=%APPX_PACKAGEDUMP_NEW% 870 | SET APPX_PACKAGEDUMP_NEW= 871 | SET CHOICE= 872 | SET ERRORCODE=0 873 | VERIFY >NUL 874 | GOTO MAINMENU 875 | 876 | REM ########################################################################################################### 877 | 878 | :CHOICE_SWITCHBKPFOLDR 879 | 880 | REM ### Select another Backup-Directory ### 881 | CLS 882 | ECHO %TITLE% 883 | ECHO. 884 | SET ERRORCODE=0 885 | SET APPX_BACKUPBASEPATH_NEW= 886 | ECHO Select another Backup-Directory 887 | ECHO. 888 | ECHO Please specify the Path to a Folder, where Backup Copies of 889 | ECHO the currently selected Appx-Database File are stored. 890 | ECHO You may keep the Default File Path by just Pressing ENTER. 891 | ECHO. 892 | ECHO You can either enter the Path manually or Drag ^& Drop the 893 | ECHO Folder to this Window. Please use Double Quotes if the Path 894 | ECHO contains Spaces. 895 | ECHO. 896 | ECHO Current Backup-Directory : [%APPX_BACKUPBASEPATH%] 897 | SET /P "APPX_BACKUPBASEPATH_NEW=New Backup-Directory : " 898 | IF NOT %ERRORLEVEL%==0 (SET "APPX_BACKUPBASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 899 | IF NOT DEFINED APPX_BACKUPBASEPATH_NEW (SET "APPX_BACKUPBASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 900 | SET APPX_BACKUPBASEPATH_NEW=%APPX_BACKUPBASEPATH_NEW:"=% 901 | IF NOT DEFINED APPX_BACKUPBASEPATH_NEW (SET "APPX_BACKUPBASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 902 | IF /I "%APPX_BACKUPBASEPATH_NEW%"=="%APPX_BACKUPBASEPATH%" (SET "APPX_BACKUPBASEPATH_NEW=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 903 | 904 | IF EXIST "%APPX_BACKUPBASEPATH_NEW%" ( 905 | SET APPX_BACKUPBASEPATH=!APPX_BACKUPBASEPATH_NEW! 906 | ECHO. 907 | ECHO Selected Backup-Directory is existing. 908 | ECHO Backup-Directory successfully switched to [!APPX_BACKUPBASEPATH!] 909 | ECHO. 910 | PAUSE 911 | SET APPX_BACKUPBASEPATH_NEW= 912 | SET ERRORCODE=0 913 | VERIFY >NUL 914 | GOTO MAINMENU 915 | ) ELSE ( 916 | ECHO. 917 | ECHO Selected Backup-Directory not existing. It will be created... 918 | MKDIR "!APPX_BACKUPBASEPATH_NEW!" >NUL 2>&1 919 | IF !ERRORLEVEL!==0 ( 920 | SET APPX_BACKUPBASEPATH=!APPX_BACKUPBASEPATH_NEW! 921 | ECHO Backup-Directory successfully created. 922 | ECHO Backup-Directory successfully switched to [!APPX_BACKUPBASEPATH!] 923 | ECHO. 924 | PAUSE 925 | SET APPX_BACKUPBASEPATH_NEW= 926 | SET ERRORCODE=0 927 | VERIFY >NUL 928 | GOTO MAINMENU 929 | ) ELSE ( 930 | ECHO Backup-Directory could not be created. 931 | ECHO Backup-Directory will not be changed. 932 | ECHO. 933 | ECHO Please select another Backup-Directory Path. 934 | ECHO. 935 | PAUSE 936 | SET APPX_BACKUPBASEPATH_NEW= 937 | SET ERRORCODE=0 938 | VERIFY >NUL 939 | GOTO CHOICE_SWITCHBKPFOLDR 940 | ) 941 | ) 942 | 943 | REM ########################################################################################################### 944 | 945 | :CHOICE_RESTOREDEFAULT 946 | 947 | REM ### Restore Default File Paths and Settings ### 948 | CLS 949 | ECHO %TITLE% 950 | ECHO. 951 | SET ERRORCODE=0 952 | SET CHOICE= 953 | ECHO Restore Default File Paths and Settings 954 | ECHO. 955 | ECHO Do you wish to Reset all File Paths and Settings to their Default Values? 956 | ECHO. 957 | ECHO Default Settings: 958 | ECHO. 959 | ECHO Appx-Database File : [%ProgramData%\Microsoft\Windows\AppRepository\StateRepository-Machine.srd] 960 | ECHO Appx-Package List : [%WORKINGDIR%\AppxPackageList.txt] 961 | ECHO Appx-Package Dump : [%WORKINGDIR%\AppxPackageDump.txt] 962 | ECHO. 963 | ECHO Backup-Directory : [%WORKINGDIR%\Backup] 964 | ECHO. 965 | SET /P "CHOICE=Do you wish to continue? [Y]/[N] (N): " 966 | IF NOT %ERRORLEVEL%==0 (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 967 | IF NOT DEFINED CHOICE (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 968 | IF /I "%CHOICE%"=="N" (SET "CHOICE=" & SET "ERRORCODE=0" & VERIFY >NUL & GOTO MAINMENU) 969 | IF /I "%CHOICE%"=="Y" (VERIFY >NUL & GOTO CHOICE_RESTOREDEFAULT_CONTINUE) 970 | ECHO. 971 | ECHO ERROR: Invalid Argument^^! 972 | ECHO. 973 | ECHO "%CHOICE%" is not a valid Option^^! 974 | ECHO Please select one of the following Options [Y/N]. 975 | ECHO. 976 | PAUSE 977 | VERIFY >NUL 978 | GOTO CHOICE_RESTOREDEFAULT 979 | 980 | :CHOICE_RESTOREDEFAULT_CONTINUE 981 | 982 | SET APPX_DATABASEPATH=%ProgramData%\Microsoft\Windows\AppRepository\StateRepository-Machine.srd 983 | SET APPX_PACKAGELIST=%WORKINGDIR%\AppxPackageList.txt 984 | SET APPX_PACKAGEDUMP=%WORKINGDIR%\AppxPackageDump.txt 985 | SET APPX_BACKUPBASEPATH=%WORKINGDIR%\Backup 986 | 987 | SET CHOICE= 988 | SET ERRORCODE=0 989 | VERIFY >NUL 990 | GOTO MAINMENU 991 | 992 | REM ########################################################################################################### 993 | 994 | :FINISH 995 | 996 | REM ### Common Entry Point after Finishing a Task ### 997 | 998 | REM ### Display common Finish Message after a Task has run ### 999 | ECHO. 1000 | ECHO All Tasks have been completed^^! Press any Key to return to Main Menu. 1001 | PAUSE 1002 | SET ERRORCODE=0 1003 | VERIFY >NUL 1004 | GOTO MAINMENU 1005 | 1006 | REM ########################################################################################################### 1007 | 1008 | :ERROR 1009 | 1010 | REM ### Handle Errors occurred in this Script ### 1011 | 1012 | REM ### Check for Error Messages from the Consoles Standard Error ### 1013 | IF NOT DEFINED ERRORSOURCE ( 1014 | IF EXIST "%ERROROUTPUT%" ( 1015 | SET ERRORSOURCE= 1016 | FOR /F "usebackq tokens=* delims=" %%A IN ("%ERROROUTPUT%") DO ( 1017 | IF NOT DEFINED ERRORSOURCE ( 1018 | SET ERRORSOURCE=%%A 1019 | ) ELSE ( 1020 | SET ERRORSOURCE=!ERRORSOURCE!!NL!%%A 1021 | ) 1022 | ) 1023 | IF NOT DEFINED ERRORSOURCE SET ERRORSOURCE=UNKNOWNERROR 1024 | ) ELSE ( 1025 | SET ERRORSOURCE=UNKNOWNERROR 1026 | ) 1027 | ) 1028 | 1029 | REM ### Display Error Message with detailed Infos ### 1030 | ECHO. 1031 | ECHO An Error has occurred during the Execution of this Script^^! 1032 | ECHO. 1033 | ECHO The following Error Details are provided... 1034 | ECHO. 1035 | ECHO Error-Code : %ERRORCODE% 1036 | ECHO Error-Module : %ERRORMODULE% 1037 | ECHO Error-Source : %ERRORSOURCE% 1038 | ECHO. 1039 | ECHO The Program will now be terminated. 1040 | ECHO. 1041 | PAUSE 1042 | GOTO EXIT 1043 | 1044 | :EXIT 1045 | 1046 | REM ### Cleanup all Variables and Files and exit this Script ### 1047 | 1048 | REM ### Reset Appx-DB related Paths and Script Constants ### 1049 | IF DEFINED APPX_PACKAGEDUMP_TEMP DEL /A /F /Q "%APPX_PACKAGEDUMP_TEMP%" >NUL 2>&1 1050 | SET APPX_DATABASEPATH= 1051 | SET APPX_DATABASEPATH_NEW= 1052 | SET APPX_PACKAGELIST= 1053 | SET APPX_PACKAGELIST_NEW= 1054 | SET APPX_PACKAGEDUMP= 1055 | SET APPX_PACKAGEDUMP_TEMP= 1056 | SET APPX_PACKAGEDUMP_NEW= 1057 | SET APPX_BACKUPTIMESTAMP= 1058 | SET APPX_BACKUPBASEPATH= 1059 | SET APPX_BACKUPBASEPATH_NEW= 1060 | SET APPX_BACKUPMAINPATH= 1061 | SET APPX_PARAMOK= 1062 | SET APPX_PACKAGENAME= 1063 | SET APPX_ISINBOX= 1064 | SET APPX_ISINBOX_DUMP= 1065 | SET APPX_DATABASEOK= 1066 | VERIFY >NUL 1067 | 1068 | REM ### Reset Resource related Paths and Script Constants ### 1069 | SET RES_SQL_HEADERTEXT= 1070 | SET RES_SCRIPT_TITLETEXT= 1071 | 1072 | REM ### Reset SQL-Script Environment ### 1073 | IF DEFINED SQL_BUILDSQLSTATEMENTS_TEMP DEL /A /F /Q "!SQL_BUILDSQLSTATEMENTS_TEMP!" >NUL 2>&1 1074 | IF DEFINED SQL_DROPTRIGGERS_TEMP DEL /A /F /Q "!SQL_DROPTRIGGERS_TEMP!" >NUL 2>&1 1075 | IF DEFINED SQL_CREATETRIGGERS_TEMP DEL /A /F /Q "!SQL_CREATETRIGGERS_TEMP!" >NUL 2>&1 1076 | IF DEFINED SQL_MODIFYAPPXDB_TEMP DEL /A /F /Q "!SQL_MODIFYAPPXDB_TEMP!" >NUL 2>&1 1077 | SET SQL_SYNCTIME= 1078 | SET SQL_FILESOK= 1079 | SET SQL_EXPORTPACKAGELIST= 1080 | SET SQL_BUILDSQLSTATEMENTS_ORIG= 1081 | SET SQL_BUILDSQLSTATEMENTS_TEMP= 1082 | SET SQL_DROPTRIGGERS_TEMP= 1083 | SET SQL_CREATETRIGGERS_TEMP= 1084 | SET SQL_MODIFYAPPXDB_TEMP= 1085 | SET SQL_RESULTSCRIPT= 1086 | VERIFY >NUL 1087 | 1088 | REM ### Reset Script Behavior Parameters ### 1089 | SET SCRIPT_IGNOREMISSINGPKG= 1090 | 1091 | REM ### Reset additional Script Variables ### 1092 | SET BREAK_A= 1093 | SET BREAK_B= 1094 | SET OPERATION= 1095 | SET RUNMODE= 1096 | SET STEPINDEX= 1097 | SET SUBSTEPINDEX= 1098 | 1099 | REM ### Reset Macros for Function Calls ### 1100 | SET RUNASSYSTEM= 1101 | SET CMDSYNCWAIT= 1102 | 1103 | REM ### Reset Paths for Tools and Functions ### 1104 | SET FART= 1105 | SET NIRCMD= 1106 | SET SQLITE= 1107 | 1108 | REM ### Reset Bitness Detection Variables ### 1109 | SET BITNESS= 1110 | 1111 | REM ### Reset Version and Title Variables ### 1112 | SET VERSION= 1113 | SET TITLE= 1114 | 1115 | REM ### Reset Code Page Settings ### 1116 | IF DEFINED CODEPAGE CHCP !CODEPAGE! >NUL 2>&1 1117 | SET CODEPAGE= 1118 | VERIFY >NUL 1119 | 1120 | REM ### Reset Error Handling Variables ### 1121 | IF DEFINED ERROROUTPUT DEL /A /F /Q "%ERROROUTPUT%" >NUL 2>&1 1122 | SET ERRORMODULE= 1123 | SET ERRORSOURCE= 1124 | SET ERROROUTPUT= 1125 | SET ERRORHANDLER= 1126 | SET LF= 1127 | VERIFY >NUL 1128 | 1129 | REM ### Reset Script Workspace ### 1130 | SET SOURCEPATH= 1131 | SET WORKINGDIR= 1132 | POPD >NUL 2>&1 1133 | VERIFY >NUL 1134 | 1135 | REM ########################################################################################################### 1136 | 1137 | REM ### Return from Variable Namespace ### 1138 | ENDLOCAL & (^ 1139 | SET ERRORCODE=%ERRORCODE% 1140 | ) 1141 | 1142 | CLS 1143 | EXIT /B %ERRORCODE% -------------------------------------------------------------------------------- /AppxPackageList.txt: -------------------------------------------------------------------------------- 1 | ######################################################################################## 2 | # Configuration File for Appx-DB Modification Script # 3 | # ================================================== # 4 | # The Appx-Database ("StateRepository-Machine.srd") of Windows 10 contains Information # 5 | # about installed Appx-Packages and controls their Distribution to the Users. Some of # 6 | # the preinstalled System-Apps like "MicrosoftStore" or the "Content Delivery Manager" # 7 | # being responsible for lot of Ads, Telemetry and self-installing Store-Apps cannot be # 8 | # uninstalled via Modern Settings Dialog or PowerShell. This is because these Packages # 9 | # are protected from Uninstallation by a special Flag ("IsInbox") within the "Package" # 10 | # Table of the Appx-Database. This Table lists all installed Appx-Packages. The Column # 11 | # named "IsInbox" defines the Protection State for each Package by containing either a # 12 | # Value of 1 which means the Package is a "Part Of The Box" and therefore it cannot be # 13 | # uninstalled or a Value of 0 meaning that the Appx-Package can be uninstalled for all # 14 | # Users. 15 | # By Modifying the IsInbox-Value of an Appx-Package to 0 the Protection of the Package # 16 | # will be diabled and it can be uninstalled by Settings Dialog or PowerShell. # 17 | # This File defines how the Protection State of the listed Packages is modified by the # 18 | # Script. It's sufficient to only specify a Part of the Package Name. Thereby the File # 19 | # will stay compatible among further Version Builds of Windows 10. # 20 | ######################################################################################## 21 | 22 | # Modern UI Dialog-App for entering Japanese Characters 23 | InputApp=0 24 | 25 | # Credential Handler for Microsoft Azure Logon 26 | Microsoft.AAD.BrokerPlugin=0 27 | 28 | # Modern UI Dialog-App for Eye-Movement Control 29 | Microsoft.ECApp=0 30 | 31 | # Container-App for Apps and Messages on the Lockscreen 32 | Microsoft.LockApp=0 33 | 34 | # App to project the Screen to a Wireless Display 35 | Microsoft.PPIProjection=0 36 | 37 | # Windows Defender SmartScreen Functionality for Modern Apps 38 | Microsoft.Windows.Apprep.ChxApp=0 39 | 40 | # Windows Kiosk Mode 41 | Microsoft.Windows.AssignedAccessLockApp=0 42 | 43 | # This App is responsible for silent Installation of suggested Apps, 44 | # automatic App-Updates, Ads and the Collection of Telemetry Data 45 | Microsoft.Windows.ContentDeliveryManager=0 46 | 47 | # QuickStart Guide showing the basics of using Narrator Feature 48 | Microsoft.Windows.NarratorQuickStart=0 49 | 50 | # Support for Captive Network Portals during OOBE-Phase of Windows 51 | Microsoft.Windows.OOBENetworkCaptivePortal=0 52 | Microsoft.Windows.OOBENetworkConnectionFlow=0 53 | 54 | # Parental Control Features 55 | Microsoft.Windows.ParentalControls=0 56 | 57 | # Integration of Contacts into the Taskbar and Start Menu 58 | Microsoft.Windows.PeopleExperienceHost=0 59 | 60 | # App for Management of Security Providers in Windows Defender 61 | Microsoft.Windows.SecHealthUI=0 62 | 63 | # Special Windows-Mode for Exams 64 | Microsoft.Windows.SecureAssessmentBrowser=0 65 | 66 | # Modern UI Dialog-App for save Removal of external GPUs 67 | Microsoft.Windows.XGpuEjectDialog=0 68 | 69 | # App for Integration of Xbox-Features into Windows 70 | Microsoft.XboxGameCallableUI=0 71 | 72 | # Camera Barcode Scanner App 73 | Windows.CBSPreview=0 -------------------------------------------------------------------------------- /Examples/UnlockHolographic.txt: -------------------------------------------------------------------------------- 1 | ######################################################################################## 2 | # Configuration File for Appx-DB Modification Script # 3 | # ================================================== # 4 | # The Appx-Database ("StateRepository-Machine.srd") of Windows 10 contains Information # 5 | # about installed Appx-Packages and controls their Distribution to the Users. Some of # 6 | # the preinstalled System-Apps like "MicrosoftStore" or the "Content Delivery Manager" # 7 | # being responsible for lot of Ads, Telemetry and self-installing Store-Apps cannot be # 8 | # uninstalled via Modern Settings Dialog or PowerShell. This is because these Packages # 9 | # are protected from Uninstallation by a special Flag ("IsInbox") within the "Package" # 10 | # Table of the Appx-Database. This Table lists all installed Appx-Packages. The Column # 11 | # named "IsInbox" defines the Protection State for each Package by containing either a # 12 | # Value of 1 which means the Package is a "Part Of The Box" and therefore it cannot be # 13 | # uninstalled or a Value of 0 meaning that the Appx-Package can be uninstalled for all # 14 | # Users. 15 | # By Modifying the IsInbox-Value of an Appx-Package to 0 the Protection of the Package # 16 | # will be diabled and it can be uninstalled by Settings Dialog or PowerShell. # 17 | # This File defines how the Protection State of the listed Packages is modified by the # 18 | # Script. It's sufficient to only specify a Part of the Package Name. Thereby the File # 19 | # will stay compatible among further Version Builds of Windows 10. # 20 | ######################################################################################## 21 | 22 | # Windows Holographic Features 23 | Microsoft.Windows.HolographicFirstRun=0 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 SoftSonic83 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | AppxDBEditor by SoftSonic83 4 |

5 | 6 |

Version: 1.2 (Initial Import)

7 | 8 |

PURPOSE:

9 | 10 |

11 | This Script automates all the necessary Steps, needed to change the 12 | Protection State of preinstalled System Apps in Windows 10, so that they 13 | can be removed afterwards by either PowerShell or Modern Settings Dialog. 14 |

15 | 16 |

FUNCTIONAL DESCRIPTION:

17 | 18 |

19 | The Script modifies the Appx-Database of Windows 10 to change the Protection 20 | States of preinstalled System-Apps so that they can be uninstalled. The Appx- 21 | Database ("StateRepository-Machine.srd") of Windows 10 contains Information 22 | about all installed Appx-Packages and controls their Distribution to the Users. 23 | Some of those preinstalled System-Apps like the Store ("MicrosoftStore") or the 24 | "Content Delivery Manager" being responsible for lots of Ads, Telemetry-Data and 25 | self-installing Apps, cannot be uninstalled via Modern Settings Dialog or 26 | PowerShell. This is because all these Packages are protected from Uninstallation 27 | by a special Flag ("IsInbox") within the "Package" Table of the Appx-DB. This 28 | SQLite-Table lists all installed Appx-Packages. The Column named "IsInbox" 29 | defines the Protection State for each Package by containing either a Value of 1 30 | which means that the Package is a "Part Of The Box" and therefore it cannot be 31 | uninstalled or a Value of 0 indicating that the Appx-Package can be uninstalled 32 | for all Users. 33 |

34 | 35 |

36 | By Modifying the "IsInbox"-Value of an Appx-Package to 0 the Protection of the 37 | Package will be disabled and can be therefore uninstalled by Settings Dialog or 38 | PowerShell. A Config File defines how the Protection State of the listed Packages 39 | is modified by the Script. It's sufficient to only specify a Part of the Package 40 | Name. Thereby the File will stay compatible among further Version Builds of Windows 41 | 10. 42 |

43 | 44 |

45 | Until now it was easily possible to manually edit the IsInbox Values by Using a 46 | graphical Editor like SQLite Database Browser. Since the newest Build of Windows 47 | 10 (1809), you will get an Error Message saying "no such function: workid", when 48 | using such Editors. This is because the StateRepository Database now contains 49 | Trigger Functions, which will get triggered to execute if specific Values are 50 | modified within the "Package" Table. These Functions cannot execute when the 51 | Database is opened in the Editor and so the above Error is thrown. To bypass this 52 | Problem all Triggers have to be safed and temporarily removed from the Database 53 | first before Editing any IsInbox Values. After applying the SQL-Statements to 54 | Update the IsInbox Values all Triggers are beeing recreated by this Script. 55 |

56 | 57 |

NOTICE:

58 | 59 |

60 | By Removing any preinstalled and protected System-Apps you may no longer get any 61 | Feature-Updates for your Windows 10 Installation in the Future. 62 |

63 | 64 |

SCRIPT FEATURES:

65 | 66 |

67 | This Menu- and Dialog-Driven Batch-Script operates based on a Configuration File 68 | in which you can specify the Names of the Packages and their respective Protection 69 | States that have to be set by the Script. The Script provides the following features: 70 |
71 |

    Core Script Features:

72 |

73 | 74 | 110 | 111 |

112 |

    Functional Features:

113 |

114 | 115 | 147 | 148 |

SCREENSHOT:

149 | 150 |

151 | 152 |

153 | 154 |

ADDENDUM:

155 | 156 |

157 | By now the Script has reached Final Version 1.2 and has been successfully tested 158 | on Version 1809 and 1803 of Windows. Since Microsoft continually changes Names of 159 | the Packages and whether they are stored as Appx-Package in the Appx-Database or 160 | as Classic Desktop Package within the Component Based Store (CBS), the Name(s) and 161 | Presence of certain Packages may vary among different Windows Builds. 162 |

163 | 164 |

165 | In the Beginning this Script was just made for personal Usage. But then I found this 166 | Post LTSC 2019 SYSPRP Failed to remove apps for the current user: 0x80073cf2 171 | where other People also have discussed the Issue of Removing protected System Apps. 172 | So I decided to share it with the Community. If you have any Comments or Suggestions, 173 | please let me know. 174 |

175 | 176 |

CONTACT INFORMATION:

177 | 178 |

179 | E-Mail: SoftSonic83@web.de 180 |

181 | 182 |

DISCLAIMER & COPYRIGHT:

183 | 184 |

185 | THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 186 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 187 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 188 | AUTHOR OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 189 | LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM 190 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 191 | THE SOFTWARE. 192 |

193 | 194 | COPYRIGHT © 2019 by SoftSonic83 -------------------------------------------------------------------------------- /Resources/Docs/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Resources/Docs/Screenshot.png -------------------------------------------------------------------------------- /Resources/Docs/SoftSonic83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Resources/Docs/SoftSonic83.png -------------------------------------------------------------------------------- /Resources/SQL/SQLHeaderText.res: -------------------------------------------------------------------------------- 1 | /* ============================================================================================ 2 | Automatically generated modification script for Microsoft Appx-Deplyoment Database 3 | ============================================================================================ 4 | This Script manipulates the Microsoft Appx-Deplyoment Database "StateRepository-Machine.srd" 5 | which resides in "%ProgramData%\Microsoft\Windows\AppRepository\StateRepository-Machine.srd" 6 | to lock or unlock system protected Appx-Packages that they can be uninstalled via Settings 7 | Dialog or PowerShell Commands. 8 | The lock state of an Appx-Package is controlled by the "IsInbox" value within the "Package" 9 | Table. A Value of 1 protects the Package from being uninstalled, a value of 0 unprotects the 10 | Package. 11 | Because of a DB-Error generated when changing an IsInbox Value since the newest Build of 12 | Windows 10 (1809), all triggers have to be removed from the database first. After applying 13 | the update commands all triggers are beeing recreated by this script. 14 | ============================================================================================ */ -------------------------------------------------------------------------------- /Resources/Script/ScriptTitleText.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Resources/Script/ScriptTitleText.res -------------------------------------------------------------------------------- /SQL/BuildSQLStatements.sql: -------------------------------------------------------------------------------- 1 | /* ============================================================================================ 2 | BuildSQLStatements.sql 3 | ============================================================================================ 4 | This SQL Script exports all Triggers from the Appx-DB ("StateRepository-Machine.srd") and 5 | dynamically creates new SQL Script Files to Drop and Restore those Triggers. 6 | ============================================================================================ */ 7 | 8 | .mode list 9 | .separator ; "\r\n" 10 | .once "[DropTriggers]" 11 | 12 | SELECT 'DROP TRIGGER ' || name || ';' AS DropTriggers FROM sqlite_master WHERE type='trigger'; 13 | 14 | .mode list 15 | .separator ; "\r\n" 16 | .once "[CreateTriggers]" 17 | 18 | SELECT Replace(Replace(sql,'; END','; END;'),';END','; END;') AS CreateTriggers FROM sqlite_master WHERE type = 'trigger'; -------------------------------------------------------------------------------- /SQL/ExportPackageList.sql: -------------------------------------------------------------------------------- 1 | /* ============================================================================================ 2 | ExportPackageList.sql 3 | ============================================================================================ 4 | This SQL Script creates a Dump of all Packages listed in the Appx-DB and thier respective 5 | IsInbox-Value and exports this List into a Text File. 6 | ============================================================================================ */ 7 | 8 | .mode column 9 | .headers on 10 | 11 | SELECT PackageFullName,IsInbox FROM Package ORDER BY IsInbox DESC; -------------------------------------------------------------------------------- /Tools/FART/x64/FART.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Tools/FART/x64/FART.EXE -------------------------------------------------------------------------------- /Tools/FART/x86/FART.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Tools/FART/x86/FART.EXE -------------------------------------------------------------------------------- /Tools/NIRCMD/x64/NIRCMD.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Tools/NIRCMD/x64/NIRCMD.EXE -------------------------------------------------------------------------------- /Tools/NIRCMD/x86/NIRCMD.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Tools/NIRCMD/x86/NIRCMD.EXE -------------------------------------------------------------------------------- /Tools/SQLITE/SQLITE.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftSonic83/AppxDBEditor/e75985d5c358029cbbd376ee58da145ce1e1e8dd/Tools/SQLITE/SQLITE.EXE --------------------------------------------------------------------------------