Page 1 of 1

PackageCloud-Pakete und AskUninstall=0

Posted: 03. Jun 2016, 09:33
by tim.v
Hallo,

wer Package-Cloud-Pakete nachträglich mit AskUninstall=0 anpasst wird irgendwann feststellen das sich in der Registry (HKEY_LOCAL_MACHINE\SOFTWARE\$Matrix42Packages$\<Hersteller>\<Softwarename> sowie HKEY_LOCAL_MACHINE\SOFTWARE\<Wow6432Node>\Microsoft\Windows\CurrentVersion\Uninstall\Matrix42 - <Hersteller> <Softwarename>) und auf der Festplatte (C:\ProgramData\$Matrix42Scripts$) diverse Reste ansammeln die u.a. beim Inventroy dazu führen das alle alten Versionen noch als installiert angezeigt werden.

Das gleiche geschieht natürlich auch mit den neuen Matri42-Templates (PackagingCenter) seit der Version 16.

Leider müssen wir auf Grund eines bis heute nicht lösbaren Fehlers:

- etliche Pakete laufen bei Update auf Failure, Deinstallation ist aber durchgelaufen - Software weg, Empirum-Registryschlüssel noch da und die neue Version kann nicht installiert werden, weil Empirum denkt die alte sei noch drauf - Fehler: "Die alte Version kann nicht deinstalliert werden"

dies des öfteren anwenden und haben deshalb folgende Zeile in unsere Templates eingefügt:

Code: Select all

...
[Product]
;ReplaceEnv <Variable>

AddMeter -1
; Prompt to the User if the application is running? Close the program after timeout
;AskKillProcesses 600, {ProductName}
#Set:Product
#Set:Installation, DONTDELETE
#Set:Deinstallation, DELETE
#Reg:OnUninstallProduct, DELETE
#Reg:Product
#Ini:Product
#Security:Product

-> NEU <-
#Set:CleanOldVersions, DONTDELETE
-> NEU <-

;-AskKillProcesses 600, {ProductName}
-AddMeter -1
...
sowie am Ende:

Code: Select all

...
[Set:CleanOldVersions]
; Entfernen alter Empirum-Registry-Schlüssel und Dateien bei AskUninstall=0
Callhidden CMD.EXE /C FOR /F "Tokens=*" %%I IN ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\$Matrix42Packages$\%DeveloperName%\%ProductName%" ^| FIND /V /I "%Version%"') DO CALL REG.EXE DELETE "%%I" /F 
Callhidden CMD.EXE /C FOR /F "Tokens=*" %%I IN ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\$Matrix42Packages$\%DeveloperName%\%ProductName%" ^| FIND /V /I "%Version%"') DO CALL REG.EXE DELETE "%%I" /F 
Callhidden CMD.EXE /C FOR /F "Tokens=*" %%I IN ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" ^| FINDSTR /C:"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Matrix42 - %DeveloperName% %ProductName% " ^| FIND /I /V "%Version%"') DO CALL REG.EXE DELETE "%%I" /F
Callhidden CMD.EXE /C FOR /F "Tokens=*" %%I IN ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" ^| FINDSTR /C:"HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Matrix42 - %DeveloperName% %ProductName% " ^| FIND /I /V "%Version%"') DO CALL REG.EXE DELETE "%%I" /F
Callhidden CMD.EXE /C FOR /F "Tokens=*" %%I IN ('DIR "%CommonAppData%\$Matrix42Scripts$\%DeveloperName%\%ProductName%" /B ^| FIND /V /I "%Version%"') DO RMDIR "%CommonAppData%\$Matrix42Scripts$\%DeveloperName%\%ProductName%\%%I" /S /Q

...
Gruß
Tim

Re: PackageCloud-Pakete und AskUninstall=0

Posted: 03. Jun 2016, 21:14
by Frank Dethlefsen
Moin!

Schöne Lösung! :wink:
Anderseits schreit das nach einer Standardlösung z.B. mit einer neuen Option AskUninstallOld=-1
:?