Monthly Archive for July, 2009

Side-by-side configuration is incorrect

In letzter Zeit ist die Meldung ‘The application has failed to start because its side-by-side configuration is incorrect’ anzutreffen. Dies bei Windows Vista ohne SP2.

VistaError

Wer versucht das Problem über die Ereignisanzeige zu lösen, wird sich in den Tiefen von .Net wohl verirren.

Ich möchte hier nicht wirklich tiefgründig werden, da dieses Problem mit SP2 oder Windows 7 behoben wurde, braucht man lediglich unter Windows Vista SP1 die folgenden zwei Hotfixes zu installieren:
Windows6.0-KB958481-x86
Windows6.0-KB958483-x86

Nach der Einspielung dieser Hotfixes wird die Applikation funktionieren.

Stefan Hotan
A member of the Ontrex SPA

Repaketieren einer MSI Installation

In diesem Blog erkläre ich, welche Elemente beim Repaketieren einer MSI Installation auftauchen und wie mit diesen umzugehen ist.

Im Jahr 2004 habe ich ein Artikel auf myITforum.com mit dem Titel ‘The three biggest mistakes in Windows Installer repackaging ’ veröffentlicht, der unter Punkt 3 beschreibt, dass es nicht falsch sein muss, eine MSI Installation zu repaketieren.

Beim Repaketieren einer MSI Datei sind auf folgende sechs Punkte Rücksicht zu nehmen:

1. Darwin Descriptoren
Diese Registry-Keys werden anhand der Advertising Tabellen erstellt und sollen nicht über die repaketierte MSI mit installiert werden, da die repaketierte MSI eigene Darwin Descriptoren generiert (sollte der Support des Advertisings gewünscht sein). Es gibt zwei Darwin Descriptoren in der Regsitry, die sich wie folgt identifizieren lassen:

In der CLSID Sektion des Classes Root Hive, erkennbar als InprocServer32 Wert
darwinclass

Oder als Command Verb in einem Programmatic Identifier (ProgID)
darwinprogid

2. Windows Installer Datei Registrationen
Jede MSI Installation registriert sich am Ende des Installationsprozesses auf dem PC. Neben der lokalen Kopie der MSI Datei werden Transformdateien, Patch Dateien und Ikonen von Shortcuts im C:\Windows\Installer Verzeichnis niedergelegt. Diese sind aus der repaketierten MSI Installation zu löschen.

installerdir

3. Windows Installer Registry Registrationen
Neben den Windows Installer Dateien werden in den folgenden Bereichen der Registry Einträge vorgenommen, die zu löschen sind:

toexclude

Weitere Registry-Einträge wie Uninstall und SharedDlls Informationen sind anhand der Repackaging Best Practices zu verwalten.

4. Advertised Shortcuts
Sollte die Hersteller MSI Installation Advertised Shortcuts erstellen, so werden diese in der repaketierten MSI Installation nicht funktionieren, da diese Binär sind und nicht interpretiert werden können.
Die Shortcuts müssen entweder manuell nachgebaut werden, oder bei der Hersteller Installation kann über die Befehlszeile ein Argument mitgegeben werden, welches anstelle von advertised Shortcuts normale Shortcuts erstellen wird. Das Argument DISABLEADVTSHORTCUTS zwingt die MSI Installation normale Shortcuts zu erstellen, welche von einem Repaketierungs-Tool interpretiert werden können.

disableadvtshortcuts

5. .NET Assemblies
Achten Sie auf Einträge in der MSIAssembly Tabelle des Hersteller MSIs, da diese aufwändig sind in CustomActions umzuschreiben. Es können alle Einträge vom Hersteller MSI kopiert und in die repaketierte MSI übernommen werden. Anpassungen sind in den meisten Fällen von Nöten, da die Komponenten-Namen und Datei-Einträge in der File Tabelle unterschiedlich ausfallen werden.
Beispiel: Die MSIAssembly Tabelle von einer Hersteller MSI
assemblyvendor

Die angepasste MSIAssembly Tabelle nach dem Repaketieren
assemblyrep
Nicht zu vergessen ist danach das Gleiche mit der MsiAssemblyName Tabelle zu tun.

6. Update Funktionalität sicherstellen
Die Sicherstellung der Kompatibilität für Major Updates, die vom Hersteller bei zukünftigen MSI Installationen erwartet wird, kann über den Produkt Code (Property) und den UpgradeCode (Property) berücksichtigt werden. Beide Werte werden während dem Repaketierungsprozess neu generiert und sollten vom originalen MSI Paket übernommen werden.

msicode

Bei der Repaketierung einer Hersteller MSI wird die Unterstützung von Hersteller-Patches (MSP Dateien) verloren gehen. MSP Dateien müssen ebenfalls repaketiert werden und mit einem geeigneten Tool wie dem Wise PatchCreationWizard von Symantec manuell erstellt werden.

Unter Berücksichtigung dieser sechs Punkte steht nun nichts mehr im Wege, eine Hersteller MSI in eine eigene MSI zu repaketieren.

Stefan Hotan
A member of the Ontrex SPA Team

RegSvr32 failed – Invalid access to memory location

Und auf einmal war sie da – Die Meldung ‘LoadLibrary .dll failed’ die nie zuvor gesehen war.

regsvr32

Das Analysieren mit dem Dependency Walker jedoch zeigt keinerlei Probleme mit dieser Datei, denn es handelt sich um eine Sicherheitserweiterung des Betriebssystemes. Die Data Execution Prevention (DEP) ist für diesen Umstand verantwortlich. DEP wurde gegen Viren und andere sicherheitsrelevanten Funktionen entwickelt. Unter anderem wird DEP die Registration von 16-bit COM Objekten verhindern.

In der Repaketierung kann dieses Problem behoben werden, indem die Self-Registration über die Registry-Tabelle durchgeführt wird.
Um die DLL oder OCX Datei wieder registrieren zu können, muss DEP konfiguriert werden. Die Konfiguration zu DEP findet man unter ‘System Properties’ – ‘Performance’.
Unter ‘Data Execution Prevention’ ist die Option ‘Turn on DEP for all programs and services except those I select:’ anzuwählen und die RegSvr32.exe im System32 Ordner zu wählen.

DataExecution Prevention

Mit dieser Einstellung kann nun die Self-Register Information ausgelesen werden und die entsprechende Registration über die Windows Installer Tabellen erfolgen. Auf diese Weise muss bei den Endanwendern keine DEP Konfiguration durchgeführt werden.

Stefan Hotan
A member of the Ontrex SPA

Schöner Wise-Scripten

Neben der Erstellung von MSI-Paketen bietet Wise Package Studio noch nützliche andere Funktionen. Ich greife heute die vergleichsweise einfache Implementierung von mächtigen Scripts mittels Wise Script heraus.

Durch die Bedienung des Editors via Drag&Drop sind syntaktische Fehler im Quellcode fast unmöglich, einfacher kann man beispielsweise Änderungen an INI-Dateien, Registry-Einträge oder Pfadvariablen automatisiert kaum vornehmen.

Durch Kompilieren des Scripts wird dann eine EXE-Datei erstellt, die ohne weitere Runtimes auf Windows-System lauffähig ist.
Einen Schönheitsfehler hat ein kompiliertes Wise Script dennoch: Den blauen Hintergrund zur Laufzeit.

Kompiliertes Wise Script mit blauem Hintergrund

Dieses Problem lässt sich umgehen, indem man das WSE-Projekt in einem beliebigen Editor, beispielsweise Notepad, öffnet und folgendes Bit “kippt”:

Wise Script in Notepad

Nachdem die vorletzte “0″ in der Zeile “Windows Flags” in “1″ geändert wurde, muss das WSE-Projekt gespeichert und erneut mit dem Wise Script Editor kompiliert werden.
Nun läuft die EXE-Datei ohne störenden blauen Hintergrund ab.

Wise Script ohne blauen Hintergrund

Tino John
Member of the Ontrex SPA Team