SW-Paketierung: Paint.NET 4.0.17

By | 19. März 2018

Die Paketierung von Paint.NET gestaltet sich sehr Admin-freundlich. Die Software erzeugt automatisch weder einen Desktoplink, noch sucht sie automatisch nach Updates. Daher kann man die msi direkt mit dem DSM Befehl „MSIInstallProduct“ aufrufen und den Rest dem Assistenten überlassen:

Danach sollte man noch auf erfolgreiche Installation prüfen. Die zwei wichtigsten Returncodes bei erfolgreicher Installation einer msi Datei sind 0 (=Erfolgreich) und 3010 (Erfolgreich, Neustart benötigt):

In der Script.inc sieht dies folgendermaßen aus:

: GeneratedInstallCodeStart
MSIInstallProduct(‚.\Extern$\Msidata\PaintDotNet_x64.msi‘,’DEBUG‘,MsiInstMach)

params:
EndProc/TW
: GeneratedInstallCodeEnd
If not %returncode%=’0′
If %returncode%=’3010′
System_Reset/?/TS
ExitProcEx(Done,’Installation of %CurrentPackage.Object.Name% sucessfully but reboot required‘)
ExitProcEx(Failed,’The execution of %CurrentPackage.Object.Name% with Error Code %returncode%‘)

Zum Schluss noch die Überprüfung, ob vorher ein Reboot nötig ist (Näheres dazu hier):

In der Script.inc sieht dies folgendermaßen aus:

Set(‚Returncode‘,’0′)
!
!
!Prüfen ob Reboot nötig
If RegKeyExistsEx(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending‘,reUseX64Hive) or RegKeyExistsEx(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired‘,reUseX64Hive) or RegValueExistsEx(‚HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager‘,’PendingFileRenameOperations‘,reUseX64Hive)
System_Reset/?/TW
ExitProcEx(Undone,’Installation kann erst nach einem Neustart erfolgen‘)
!
: GeneratedInstallCodeStart
MSIInstallProduct(‚.\Extern$\Msidata\PaintDotNet_x64.msi‘,’DEBUG‘,MsiInstMach)

params:
EndProc/TW
: GeneratedInstallCodeEnd
If not %returncode%=’0′
If %returncode%=’3010′
System_Reset/?/TS
ExitProcEx(Done,’Installation of %CurrentPackage.Object.Name% sucessfully but reboot required‘)
ExitProcEx(Failed,’The execution of %CurrentPackage.Object.Name% with Error Code %returncode%‘)