<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ontrex Software Package Atelier Teamblog &#187; Windows Installer</title>
	<atom:link href="http://spablog.ontrex.ch/category/tech/windows-installer/feed/" rel="self" type="application/rss+xml" />
	<link>http://spablog.ontrex.ch</link>
	<description>Software Paketierung mit Ontrex Kung Fu</description>
	<lastBuildDate>Sun, 27 Jun 2010 14:03:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>REMOVE Kondition &#8211; Die Wahrheit</title>
		<link>http://spablog.ontrex.ch/2010/02/25/remove-kondition-die-wahrheit/</link>
		<comments>http://spablog.ontrex.ch/2010/02/25/remove-kondition-die-wahrheit/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 14:20:07 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=359</guid>
		<description><![CDATA[Als ich kürzlich den Artikel Test your conditions von Heath Stewart gelesen habe, wusste ich sogleich, dass es nun an der Zeit ist die letzten technischen Details über die REMOVE Kondition preis zu geben. Wie die REMOVE Kondition optimal eingesetzt wird entscheidet die Feature Struktur eines Produktes. Eine einfache Aussage wie REMOVE~=&#8221;ALL&#8221; zu verwenden, ist keine gute Idee, [...]]]></description>
			<content:encoded><![CDATA[<p>Als ich kürzlich den Artikel <a href="http://blogs.msdn.com/heaths/archive/2010/02/15/test-your-conditions.aspx" target="_blank">Test your conditions</a> von Heath Stewart gelesen habe, wusste ich sogleich, dass es nun an der Zeit ist die letzten technischen Details über die REMOVE Kondition preis zu geben.</p>
<p>Wie die REMOVE Kondition optimal eingesetzt wird entscheidet die Feature Struktur eines Produktes. Eine einfache Aussage wie REMOVE~=&#8221;ALL&#8221; zu verwenden, ist keine gute Idee, da es Situationen gibt, wo diese Kondition nicht greift.</p>
<p>Fact ist, dass die REMOVE Kondition im Falle einer Deinstallation verwendet werden kann.<br />
Fact ist, dass bei einer repaketierten Applikation, im Generellen die Kondition REMOVE verwendet werden kann.</p>
<p>Der Ausdruck REMOVE~=&#8221;ALL&#8221; hat sich über ein Jahrzehnt stark verbreitet. Der Wert ALL bedeutet, dass alle Features eines Produktes deinstalliert werden, sprich die Installation wird komplett deinstalliert. Dies ist die allgemeine Annahme in der Software Paketierung.</p>
<p>REMOVE~=&#8221;ALL&#8221; wird jedoch nicht in allen Situationen funktionieren, wie es Heath Stewart schon angedeutet hat. Es gibt eine Situation, den Wartungsmodus um es genau zu benennen, wo diese Kondition nicht greift. Betroffen davon sind besonders Software-Entwickler, da dessen Deinstallationen öfters mit dem Wartungsmodus durchgeführt werden und von diesem Problem betroffen sind.</p>
<p>Ein Produkt  kann über folgende vier Wege deinstalliert werden.</p>
<p><a href="http://spablog.ontrex.ch/wp-content/uploads/2010/02/REMOVE2.png"><img class="alignnone size-full wp-image-362" title="REMOVE" src="http://spablog.ontrex.ch/wp-content/uploads/2010/02/REMOVE2.png" alt="" width="493" height="171" /></a><a href="http://spablog.ontrex.ch/wp-content/uploads/2010/02/REMOVE1.png"></a></p>
<p>Deinstallation mittels Befehlszeile (msiexec.exe -x &lt;product code&gt; /qb) wie gewöhnlich ein Produkt automatisch deinstalliert wird:<small><br />
MSI (s) (28:5C): Command Line: REMOVE=ALL<br />
Property(S): REMOVE = ALL<br />
</small><br />
Deinstallation über Control Panel &gt; Add or Remove Programs, wie es ein Endanwender eine Deinstallation durchführen wird:<small><br />
MSI (s) (28:F8): Command Line: REMOVE=ALL<br />
Property(S): REMOVE = ALL<br />
</small><br />
Deinstallation über den Wartungsmodus einer MSI Installation (Modify, Repair oder Remove Option im Setup Wizard)<small><br />
MSI (s) (28:5C): Command Line:<br />
MSI (c) (28:1C): Switching to server: REMOVE=Complete<br />
MSI (s) (28:10): PROPERTY CHANGE: Adding REMOVE property. Its value is &#8216;Complete&#8217;.<br />
MSI (s) (28:10): PROPERTY CHANGE: Modifying REMOVE property. Its current value is &#8216;Complete&#8217;. Its new value: &#8216;ALL&#8217;.<br />
Property(S): REMOVE = ALL<br />
</small></p>
<p>Deinstallation über die Windows Installer API<small><br />
MSI (s) (28:EC): Command Line: REMOVE=ALL<br />
Property(S): REMOVE = ALL<br />
</small><br />
Es wird nun ersichtlich, das eine Deinstallation über den Wartungsmodus anders abläuft als die restlichen Deinstallationswege. Beim Wartungsmodus steht es von beginn an nicht fest, welche Windows Installer Aktion der Anwender ausüben wird. Daher kann die REMOVE Property nicht  von Beginn an definiert werden.<small><br />
MSI (s) (28:5C): Command Line:<br />
</small></p>
<p>In der REMOVE Property stehen alle Feature Namen des aktuell installierten Produktes (Features werden mit ; getrennt falls mehrere installiert sein sollten).<small><br />
MSI (c) (28:1C): Switching to server: REMOVE=Complete<br />
MSI (s) (28:10): PROPERTY CHANGE: Adding REMOVE property. Its value is &#8216;Complete&#8217;.<br />
</small><br />
Anhand der Windows Installer SDK steht fest, das der Remove Control Event das Argument ALL  dem REMOVE Property der Installations-Session weiter geben muss, damit das gesamte Produkt deinstalliert wird.<small><br />
MSI (s) (28:10): PROPERTY CHANGE: Modifying REMOVE property. Its current value is &#8216;Complete&#8217;. Its new value: &#8216;ALL&#8217;.<br />
Property(S): REMOVE = ALL<br />
</small><br />
Entscheidend ist, die Action<strong> InstallValidate</strong> erkennt den Remove Control Event Eingriff  und ändert den Wert in der REMOVE Property auf ALL.</p>
<blockquote><p><strong>Dies bedeutet: Wird ein Produkt über den Wartungsmodus deinstalliert, so werden Konditionen mit dem Argument REMOVE~=&#8221;ALL&#8221; erst nach der InstallValidate Aktion funktionieren.</strong></p></blockquote>
<p>Sollte früher eine Aktion diese Kondition verwenden, so wird diese nicht ausgeführt.</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2010/02/25/remove-kondition-die-wahrheit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Companion Files</title>
		<link>http://spablog.ontrex.ch/2009/12/23/companion-files/</link>
		<comments>http://spablog.ontrex.ch/2009/12/23/companion-files/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 10:52:01 +0000</pubDate>
		<dc:creator>Fabio Di Lorenzo</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=276</guid>
		<description><![CDATA[Oft begegnet man in der Software Paketierung dem Problem, dass man eine unversionierte Datei ersetzen will, dies aber nicht immer auf Anhieb gelingt. Der Grund ist meist schnell gefunden, die Datei wurde mittlerweile modifiziert oder aus anderen Gründen stimmt das Create/Modified Datum nicht mehr überein. Deshalb verhindern auch die Default File Versioning Rules das erfolgreiche [...]]]></description>
			<content:encoded><![CDATA[<p>Oft begegnet man in der Software Paketierung dem Problem, dass man eine unversionierte Datei ersetzen will, dies aber nicht immer auf Anhieb gelingt.</p>
<p>Der Grund ist meist schnell gefunden, die Datei wurde mittlerweile modifiziert oder aus anderen Gründen stimmt das Create/Modified Datum nicht mehr überein. Deshalb verhindern auch die Default File Versioning Rules das erfolgreiche Ersetzen der Datei.</p>
<p>Die Windows Installer Technologie bietet aber hierfür eine elegante Lösungsmöglichkeit an, welche leider oft in Vergessenheit gerät.</p>
<p><strong>Companion Files</strong>, zu Deutsch: Begleit-Dateien, bezeichnet man Dateien in der Installation, bei denen man eine andere Datei als &#8220;Entscheidungsträger&#8221; definiert.</p>
<p>Beispiel:</p>
<blockquote><p>Für userdata.usr (unversioniert) konfiguriert man &#8220;MyVersioned.dll&#8221; (versioniert) als &#8220;Entscheidungsträger&#8221;. Sofern MyVersioned.dll installiert wird (Beispiel: Höhere Version als bestehende MyVersioned.dll), wird auch userdata.usr installiert.</p></blockquote>
<p>Wise Package Studio kann dies wie folgt realisiert werden:</p>
<ol>
<li>Man wechselt auf folgende Ansicht:<br />
&#8220;Setup Editor -&gt; Tables -&gt; File&#8221;</li>
<li>Als nächster Schritt sucht man sich die unversionierte Datei heraus.</li>
<li>Sobald man diese gefunden hat, öffnet man das DropDown Menu bei der Spalte &#8220;Version&#8221;.<br />
<img class="alignnone size-full wp-image-277" title="companion_files" src="http://spablog.ontrex.ch/wp-content/uploads/2009/12/companion_files.png" alt="companion_files" width="508" height="112" /></li>
<li>Bei der Spalte trägt man nun die gewünschte &#8220;Entscheidungsträger&#8221; Datei ein, diese sollte natürlich optimaler weise eine versionierte Datei sein.</li>
</ol>
<p>Den Mechanismus in Aktion sieht man entsprechend in der Logfile:</p>
<blockquote><p>File: C:\Program Files\MyProject\userdata.usr;    Overwrite;    Won&#8217;t patch;    Existing file is of an equal version    (Checked using version of companion: C:\Program Files\MyProject\MyVersioned.dll)</p></blockquote>
<p>Weiterführende Information gibt es natürlich wie immer im Windows Installer SDK:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/aa367997%28VS.85%29.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/aa367997%28VS.85%29.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/12/23/companion-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internal Error 2709</title>
		<link>http://spablog.ontrex.ch/2009/11/11/internal-error-2709/</link>
		<comments>http://spablog.ontrex.ch/2009/11/11/internal-error-2709/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 15:30:15 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=236</guid>
		<description><![CDATA[Die Windows Installer 2709 Fehlermeldung ist eine Benachrichtigung, die bei einer Update Installation erscheinen kann. Wird eine betroffene Installation auf einer Clean Machine installiert, so sieht alles gut aus, keine Fehlermeldung erscheint. Sollte die gleiche Installation als Update Installation durchgeführt werden, so erscheint die 2709 Fehlermeldung. Interessant dabei ist, das der Test auf einer Clean Machine [...]]]></description>
			<content:encoded><![CDATA[<p>Die Windows Installer 2709 Fehlermeldung ist eine Benachrichtigung, die bei einer Update Installation erscheinen kann. Wird eine betroffene Installation auf einer Clean Machine installiert, so sieht alles gut aus, keine Fehlermeldung erscheint. Sollte die gleiche Installation als Update Installation durchgeführt werden, so erscheint die 2709 Fehlermeldung. Interessant dabei ist, das der Test auf einer Clean Machine eigentlich das gleiche Problem haben sollte, das Problem aber aus internen Abläufen der Windows Installer Session automatisch korrigiert wird.</p>
<p><img class="alignnone size-full wp-image-237" title="2709" src="http://spablog.ontrex.ch/wp-content/uploads/2009/11/2709.PNG" alt="2709" width="406" height="206" /></p>
<p>Das Problem kann unter anderem durch ein Setup-Capture mit Wise Package Studio entstehen, wenn Dateien mit Merge Modulen ersetzt werden. Wie in diesem Beispiel wurde die Datei comdlg32.ocx durch ein Merge Module von Microsoft ersetzt. Dieser Vorgang löscht jedoch nicht die Verweise der bereits erstellten Componenten in der FeatureComponents Tabelle.</p>
<p><img class="alignnone size-full wp-image-238" title="FeatureComponent" src="http://spablog.ontrex.ch/wp-content/uploads/2009/11/FeatureComponent.PNG" alt="FeatureComponent" width="243" height="120" /><br />
Komponenten die während einem Setup-Capture mit einem Merge-Module ersetzt wurden, bleiben in der FeatureComponents Tabelle zurück</p>
<p>Das etwas mit diesen Komponenten nicht stimmt, wird in der Tabellenansicht des Windows Installer Editors ersichtlich. Werden diese Einträge übersehen, so wird auf diesen Misstand während der Validierung darauf hingewiesen:<br />
Not a valid foreign key; Table: FeatureComponents, Column: Component_, Key(s): Complete.comdlg32.ocx ice03.html FeatureComponents Component_ Complete comdlg32.ocx<br />
Evaluation: ICE03</p>
<p>Diese Einträge sind aus der FeatureComponents Tabelle zu löschen. Es kann jedoch vorkommen, das die Validierung aus unbekannten Gründen bei dieser Überprüfung fehlschlägt und keine Probleme angezeigt werden. Bei einem anschliessenden Testdurchlauf der Installation wird keine Fehlermeldung erscheinen, da die Windows Installer Session diese fehlerhaften Einträge überspringt.</p>
<p>Doing action: InstallValidate<br />
Feature: Complete; Installed: Absent;   Request: Local;   Action: Local<br />
Component: CreateFolder; Installed: Absent;   Request: Local;   Action: Local<br />
Component: registry44; Installed: Absent;   Request: Local;   Action: Local<br />
Component: findmsm.exe; Installed: Absent;   Request: Local;   Action: Local</p>
<p>Während der InstallValidate Aktion werden die betroffenen Komponenten ausgewählt, die fehlerhaften Einträge werden einfach übergangen.</p>
<p>Soweit scheint alles zu funktionieren, bis zu dem Tag, an dem mit der gleichen Installation ein Update durchgeführt wird. Bei einer Update Installation wird zusätzlich die MigrateFeatureStates Aktion durchgeführt. Diese überprüft die Stati der bereits Installierten Features und vererbt die Feature States bei der Update Installation (Die Vererbung von Feature Stati kann mit der Upgrade Tabelle deaktiviert werden). Die Aktion  MigrateFeatureStates übergeht  die fehlerhaften Einträge in der FeatureComponents Tabelle jedoch nicht und wird mit der Fehlermeldung 2709 die Installation abbrechen.</p>
<p>DEBUG: Error 2709:  The specified Component name (&#8216;comdlg32.ocx&#8217;) not found in Component Table.</p>
<p>In diesem Fall sind in der Installation die fehlerhaften Einträge in der FeatureComponents Tabelle zu beheben. Wir empfehlen diese Überprüfung in die Best-Practices von Software-Paketierungs Guidelines aufzunehmen, um diesem Problem zuvor zukommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/11/11/internal-error-2709/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verzeichnisverfügbarkeit bei Custom Actions</title>
		<link>http://spablog.ontrex.ch/2009/11/09/verzeichnisverfugbarkeit-bei-custom-actions/</link>
		<comments>http://spablog.ontrex.ch/2009/11/09/verzeichnisverfugbarkeit-bei-custom-actions/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:58:39 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=234</guid>
		<description><![CDATA[Nach den Regeln der alten Windows Installer Schule wird gelernt, das beim Einsatz von Custom Actions Verzeichnisse der Directory Tabelle erst nach der CostFinalize Aktion zur Verfügung stehen. Demnach sollen Custom Actions, die mit Verzeichnis-Verweise arbeiten, erst nach der CostFinalize Aktion ausgeführt werden. Die CostFinalize Aktion wird alle Verzeichnisse für die Windows Installer Session bereitstellen. MSI [...]]]></description>
			<content:encoded><![CDATA[<p>Nach den Regeln der alten Windows Installer Schule wird gelernt, das beim Einsatz von Custom Actions Verzeichnisse der Directory Tabelle erst nach der CostFinalize Aktion zur Verfügung stehen.<br />
Demnach sollen Custom Actions, die mit Verzeichnis-Verweise arbeiten, erst nach der CostFinalize Aktion ausgeführt werden.</p>
<p>Die CostFinalize Aktion wird alle Verzeichnisse für die Windows Installer Session bereitstellen.<br />
MSI (s) (F8:E8): Doing action: CostFinalize<br />
MSI (s) (F8:E8): PROPERTY CHANGE: Adding TARGETDIR property. Its value is &#8216;C:\&#8217;.</p>
<p>Interessanterweise kann bei der AppSearch Aktion mit Verzeichnissen wie WindowsFolder und ProgramFilesFolder gearbeitet werden obwohl diese vor der CostFinalize Aktion ausgeführt wird. Dementsprechend gibt es Verzeichnisse die schon vor der CostFinalize Aktion verwendet werden können.</p>
<p>Bei der Analyse einer Log-Datei wird ersichtlich, das vor der INSTALL Session, also noch bevor überhaupt eine Aktion ausgeübt werden kann, alle SpecialFolders (Magic Folders) aufgelöst werden und danach sofort zur Verfügung stehen.</p>
<p>Mit dem APICall SHGetFolderPath werden SpecialFolders aufgelöst.<br />
MSI (s) (F8:E8): SHELL32::SHGetFolderPath returned: C:\Documents and Settings\Administrator\Application Data</p>
<p>Bei der Analyse der Log-Datei, sieht man jedoch den WindowsFolder, SystemFolder und den ProgramFilesFolder nicht aufgelistet. Diese Verzeichnisse stehen wie die restlichen SpecialFolders bei Beginn der INSTALL Session zur Verfügung.</p>
<p>Somit lässt sich aussagen, das SpecialFolders von Beginn der Installation verwendet werden können und Verzeichnisse, welche die Installation selber erstellt, nach der CostFinalize Aktion.</p>
<p>Mit dieser Erkenntnis können viele Custom Actions, welche mit SpecialFolders arbeiten, schon vor der CostFinalize Aktion ausgeführt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/11/09/verzeichnisverfugbarkeit-bei-custom-actions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eine INI Datei nicht reparieren</title>
		<link>http://spablog.ontrex.ch/2009/10/28/eine-ini-datei-nicht-reparieren/</link>
		<comments>http://spablog.ontrex.ch/2009/10/28/eine-ini-datei-nicht-reparieren/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 13:39:44 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=220</guid>
		<description><![CDATA[In dem heutigen Post geht es in der Windows Installer Technologie um die Situation, dass eine INI Datei während einer Reparatur nicht aktuallisiert werden soll. Das Standard-Verhalten bei einer Reparatur ist wiefolgt: Der Inhalt einer INI-Datei wird mit den Werten aus der INIFile Tabelle verglichen und bei einer Differenz mit den ursprünglichen Werten überschrieben. Sollte [...]]]></description>
			<content:encoded><![CDATA[<p>In dem heutigen Post geht es in der Windows Installer Technologie um die Situation, dass eine INI Datei während einer Reparatur nicht aktuallisiert werden soll.</p>
<p>Das Standard-Verhalten bei einer Reparatur ist wiefolgt: Der Inhalt einer INI-Datei wird mit den Werten aus der INIFile Tabelle verglichen und bei einer Differenz mit den ursprünglichen Werten überschrieben.<br />
Sollte ein Endbenutzer Änderungen an einer INI-Datei vorgenommen haben, so gehen diese bei einer Reparatur des Produktes verloren.</p>
<p>Gemäss der Windows Installer SDK kann über die Aktions-Spalte mit dem Wert 1 festgelegt werden, dass ein Eintrag nur überschrieben wird, falls dieser nicht vorhanden sein sollte. In vielen Fällen wird die Änderung der Aktion die Situation entschärfen, da die Vorgabe auch bei einer Reparatur angewendet wird.</p>
<p><img class="alignnone size-full wp-image-221" title="IniFileTable" src="http://spablog.ontrex.ch/wp-content/uploads/2009/10/IniFileTable.PNG" alt="IniFileTable" width="420" height="43" /><br />
Mit der Action-Spalte lassen sich zusätzliche Modifikations-Optionen für INI-Dateien einstellen</p>
<p>Betrachtet man die Situation genauer, so kann es sein, dass ein Endanwender Werte aus der INI-Datei löscht. Diese werden bei einer Reparatur wieder hergestellt und verwirft damit die Konfiguration des Endanwenders. Es gibt keine Modifikations-Option die diese Situation berücksichtigt. Eine Möglichkeit bietet die Verwendung einer Kondition in der InstallExecuteSequence Tablle bei der WriteIniValues Aktion. Die WriteIniValues Aktion schreibt die Werte einer INI-Datei anhand der Instruktionen der INIFile Tabelle. Mit der Kondition NOT REINSTALL kann die Aktion bei einer Reparatur ausgelassen werden. Damit geht die Reparaturfunktion aller INI-Dateien verloren, was an dieser Stelle zu erwähnen ist.</p>
<p><img class="alignnone size-full wp-image-222" title="INIFile" src="http://spablog.ontrex.ch/wp-content/uploads/2009/10/INIFile.PNG" alt="INIFile" width="364" height="42" /><br />
Bei der Reparatur kann die Modifikation von INI-Dateien ausgeschaltet werden</p>
<p>Sollten die beschriebenen Möglichkeiten keine Alternative zur Situation sein, so stehen weitere Möglichkeiten über Benutzerdefinierte Aktionen (Custom Actions) zur Verfügung. Eine einfache Möglichkeit ohne viel Aufwand mit Scripting-Sprachen zu verbringen bietet der Wise Script Editor. Mit der Funktion Editet INI File kann eine INI-Datei erstellt werden. Die Custom Action ist mit der Kondition NOT Installed  zu versehen, dann wird die Datei nur erstellt jedoch nicht geändert bei einer Reparatur.</p>
<p><img class="alignnone size-full wp-image-224" title="Edit" src="http://spablog.ontrex.ch/wp-content/uploads/2009/10/Edit1.PNG" alt="Edit" width="333" height="362" /><br />
Mit dem WiseScript Editor lassen sich einfach INI-Dateien erstellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/10/28/eine-ini-datei-nicht-reparieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSI Patch &#8211; Feature Level 0 Effekt</title>
		<link>http://spablog.ontrex.ch/2009/09/30/msi-patch-feature-level-0-effekt/</link>
		<comments>http://spablog.ontrex.ch/2009/09/30/msi-patch-feature-level-0-effekt/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 07:47:59 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=208</guid>
		<description><![CDATA[Die Anzahl von Programmupdates, die auf Microsoft Windows Installer Patch-Dateien (.MSP) aufbauen, nehmen kontinuierlich zu. Dabei können Patch-Dateien auf unterschiedliche Wege ein Produkt aktualisieren. Die folgenden Details zu einer Administrativen-Installation (Netzwerk-Installation) sind ein Bestandteil aus unserer Windows Installer Schulung &#8216;Schwarzgurtpaketierung&#8217;, die wir ab nächstem Jahr in unser Kursprogram aufgenommen und kürzlich als Power-Workshop im grösseren Kundenumfeld [...]]]></description>
			<content:encoded><![CDATA[<p>Die Anzahl von Programmupdates, die auf Microsoft Windows Installer Patch-Dateien (.MSP) aufbauen, nehmen kontinuierlich zu. Dabei können Patch-Dateien auf unterschiedliche Wege ein Produkt aktualisieren.</p>
<p>Die folgenden Details zu einer Administrativen-Installation (Netzwerk-Installation) sind ein Bestandteil aus unserer Windows Installer Schulung &#8216;Schwarzgurtpaketierung&#8217;, die wir ab nächstem Jahr in unser Kursprogram aufgenommen und kürzlich als Power-Workshop im grösseren Kundenumfeld präsentiert haben.</p>
<p>Eine Möglichkeit der Patch-Integration ist eine Admin-Installation durchzuführen und diese mit einer Patch-Datei zu aktualisieren. Die aktualisierte Windows Installer Installation kann sowohl auf neuen Rechnern installiert werden, sowie bestehende Installationen über einen Reparatur-Zyklus auf den neuen Stand bringen.</p>
<p>In den meisten Fällen muss von der Original-Installation eine Admin-Installation durchgeführt werden (msiexec.exe -a datei.msi). Obwohl dies eine &#8216;High-Level&#8217; Aktion ist, also eine grundlegende Windows Installer Funktion, ist dies keine Garantie dafür, dass der Software-Hersteller diese vollumfänglich unterstützt.</p>
<p>Ein Seiteneffekt kann die Feature Level 0 Problematik sein. Diese führt dazu, dass nicht alle Dateien extrahiert werden, da die Condition Tabelle bei einer Admin-Installation nicht abgearbeitet werden.<br />
Es ist also vor einer Admin-Installation darauf zu achten, ob in der Feature-Tabelle ein Feature mit dem Level 0 existiert. Sollte dieses Feature-Level während einer normalen Installation geändert werden, so ist vor der Admin-Installation der Wert des Features zu erhöhen und nach der Admin-Installation wieder zurück zu stellen. Danach kann die Patch-Datei integriert werden.</p>
<p><img class="alignnone size-full wp-image-209" title="condition" src="http://spablog.ontrex.ch/wp-content/uploads/2009/09/condition.png" alt="condition" width="168" height="262" /><br />
Mit Hilfe der Condition Tabelle kann ein Software-Hersteller während der Installation ein Feature-Level anhand von Konditionen verändern. Dies geschieht jedoch nicht während einer Admin-Installation, was zu Dateiverlusten führen kann.</p>
<p>Weitere Informationen zu unseren Wise Kursen sind auf unserer Schulungsseite zu finden <a href="http://www.ontrex.ch">http://www.ontrex.ch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/09/30/msi-patch-feature-level-0-effekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unable to merge new configuration</title>
		<link>http://spablog.ontrex.ch/2009/06/15/unable-to-merge-new-configuration/</link>
		<comments>http://spablog.ontrex.ch/2009/06/15/unable-to-merge-new-configuration/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 09:45:00 +0000</pubDate>
		<dc:creator>Stefan Hotan</dc:creator>
				<category><![CDATA[Merge Module]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=103</guid>
		<description><![CDATA[Durch die Einführung des Dual-Token in Windows Vista müssen die Setup-Autoren bei der Erstellung von Custom Actions darauf achten, dass Aktionen, welche Änderungen an Per-Machine Ressoucen vornehmen, als In-Script (deferred) Aktionen unter dem System Kontext ausgeführt werden. Nur dadurch wird eine Aktion im Admin-Token durchgeführt. Bei älteren Installationen kann es vorkommen, dass eine Aktion, welche [...]]]></description>
			<content:encoded><![CDATA[<p>Durch die Einführung des Dual-Token in Windows Vista müssen die Setup-Autoren bei der Erstellung von Custom Actions darauf achten, dass Aktionen, welche Änderungen an Per-Machine Ressoucen vornehmen, als In-Script (deferred) Aktionen unter dem System Kontext ausgeführt werden. Nur dadurch wird eine Aktion im Admin-Token durchgeführt.</p>
<p>Bei älteren Installationen kann es vorkommen, dass eine Aktion, welche mit Variablen (Properties) arbeitet, im Immediate Bereich der ExecuteSequence Tabellen ausgeführt wurden. Ab Vista werden diese zum Grösstenteil nicht mehr funktionieren, da diese nun im Standard LPU ausgeführt werden und dadurch zu wenig Rechte besitzen. Im Grunde genommen ist dies auch der richtige Ansatz, denn spätestens bei einem Self-Repair einer Installation mit Standard Benutzerrechten unter Windows XP hätte diese Aktionen das gleiche Problem wie in einem Dual-Token Umfeld.</p>
<p>Davon betroffen ist auch das Borland BDE Merge Module. Wenn diese Merge Module unter Windows Vista oder Windows 7 verwendet wird, so bleibt die Installation mit der Meldung &#8216;Unable to merge new configuration. Use BDE Amdinistrator to merge your new configuration.&#8217; stehen. Das Fenster muss manuell geschlossen werden.</p>
<p><img class="alignnone size-full wp-image-104" title="Unable to merge new configuration" src="http://spablog.ontrex.ch/wp-content/uploads/2009/06/BDE.PNG" alt="Unable to merge new configuration" width="412" height="166" /></p>
<p>Die Frage stellt sich nun, was muss getan werden, um dieses Problem zu lösen. Die Antwort jedoch fällt nicht so einfach aus.<br />
Wenn man die Log-Datei der Installation ansieht</p>
<p>Doing action: BDEConfig.E966F0CB_76B3_11D3_945B_00C04FB1760A</p>
<p>dann wird dieses Fenster durch die BDEConfig Aktion verursacht. Die Aktion wird nach InstallFinalize im Immediate, sprich im Standard LPU ausgeführt, und dafür ist die Aktion nicht vorgesehen. Leider wurde der Support für die BDE Technologie schon seit einem Jahrzehnt eingestellt. Mittlerweile kann man sogar das Merge Module nicht mehr herunterladen, geschweige denn eine aktuelle, verbesserte Version von Borland beziehen.</p>
<p>Damit die Installation unter Vista ohne die Dialog-Box durchläuft, muss die Kondition in der InstallExecuteSequence Tabelle abgeändert werden. Dieser Eingriff sollte direkt im Merge Module vorgenommen werden (ModuleInstallExecuteSequence Tabelle).</p>
<p><img class="alignnone size-full wp-image-105" title="BDEConfig" src="http://spablog.ontrex.ch/wp-content/uploads/2009/06/BDEConfig.png" alt="BDEConfig" width="564" height="28" /></p>
<p>Mit dem Zusatz &#8216;AND VersionNT &lt; 600&#8242; wird die Aktion nur noch unter Betriebssystemen vor Windows Vista durchgeführt.</p>
<p>Durch diesen Eingriff wird die BDEMERGE.INI nicht mehr abgearbeitet. Das lässt sich leider nicht verhindern. Diese Funktion muss nachgebaut, sollten Änderungen in der idapi32.cfg vorgenommen werden.</p>
<p>Eine Möglichkeit bietet das Wise Installation System 9, es beinhaltet Funktionen wie <strong>Add BDE Alias (</strong>Da der BDE Support eingestellt wurde, sind die BDE Funktionen in den aktuellen Versionen des Wise Installation System nicht mehr vorhanden).</p>
<p>Eine weitere Möglichkeit bietet die idapinst.dll. Diese DLL beinhaltet die Funktionen wie MergeCfg oder AddAlias. Die Dokumentation über diese Funktionen sind heute so gut wie unauffindbar. Mann spürt hier ganz klar, dass der Support von BDE schon lange eingestellt wurde.</p>
<p>Wenn nun alle Stricke reissen sollten, dann wäre eine weitere Möglichkeit das betroffene Programm zum Beispiel mit SVS oder APP-V zu virtualisieren, da dadurch eine eigenständige idapi32.cfg verwendet werden kann.</p>
<p>Stefan Hotan<br />
A member of the Ontrex SPA Team</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/06/15/unable-to-merge-new-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Folder Redirection</title>
		<link>http://spablog.ontrex.ch/2009/06/11/folder-redirection/</link>
		<comments>http://spablog.ontrex.ch/2009/06/11/folder-redirection/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 09:56:13 +0000</pubDate>
		<dc:creator>Fabio Di Lorenzo</dc:creator>
				<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://spablog.ontrex.ch/?p=91</guid>
		<description><![CDATA[Vor allem im Corporate IT Umfeld ist es eine bekannte Gewohnheit gewisse „spezielle“ Verzeichnisse (Special Folders) via Group Policy auf Netzlaufwerke auszulagern (Folder Redirection).  Einige Beispiele hierfür sind: MSI Property Bezeichnung Standardeinstellung englisches Windows XP Beispiel Redirection Pfad AppDataFolder Application Data C:\Documents and Settings\USERNAME\Application Data \\myserver\userhomes$\USERNAME\Application Data PersonalFolder My Documents C:\Documents and Settings\USERNAME\My Documents \\myserver\userhomes$\USERNAME\My [...]]]></description>
			<content:encoded><![CDATA[<p>Vor allem im Corporate IT Umfeld ist es eine bekannte Gewohnheit gewisse „spezielle“ Verzeichnisse (Special Folders) via Group Policy auf Netzlaufwerke auszulagern (Folder Redirection).  Einige Beispiele hierfür sind:</p>
<table border="0">
<tbody>
<tr>
<td><strong>MSI Property</strong></td>
<td><strong>Bezeichnung</strong></td>
<td><strong>Standardeinstellung englisches Windows XP<br />
</strong></td>
<td><strong>Beispiel Redirection Pfad<br />
</strong></td>
</tr>
<tr>
<td>AppDataFolder</td>
<td>Application Data</td>
<td>C:\Documents and Settings\USERNAME\Application Data</td>
<td>\\myserver\userhomes$\USERNAME\Application Data</td>
</tr>
<tr>
<td>PersonalFolder</td>
<td>My Documents</td>
<td>C:\Documents and Settings\USERNAME\My Documents</td>
<td>\\myserver\userhomes$\USERNAME\My Documents</td>
</tr>
</tbody>
</table>
<p>Diese werden dann je nach verwendeter Architektur mittels Offline-Folders Mechanismus mit dem Client synchronisiert.</p>
<p>Der Windows Installer mag diese Gegebenheit vom Design her nicht, insbesondere wenn diese Lokationen nicht zur Verfügung stehen.</p>
<p>Der Windows Installer initiiert nämlich während der CostFinalize Aktion die gesamte Directory Tabelle und überprüft dabei  die Verfügbarkeit sämtlicher dieser Verzeichnisse, d.h ob sie existieren, beschreibar sind etc.</p>
<p>Ein praxisbezogenes Beispiel: Ein Notebook Benutzer ruft im Hotel zum ersten mal den VPN Client auf, welches ein Self-Repair verursacht damit die Benutzerkonfiguration per-User installiert wird.</p>
<p>Während dieses Self-Healings (gilt auch für ActiveSetup oder Repair) wird diese Überprüfung der „umgeleiteten“ Lokationen in einem Fehler enden, da er nicht auf das Netzlaufwerk  zugreifen kann und somit diese &#8220;special folders&#8221; überprüfen kann. Folgende Fehlermeldung erscheint:</p>
<p><img class="alignnone size-full wp-image-96" title="untitled" src="http://spablog.ontrex.ch/wp-content/uploads/2009/06/untitled.jpg" alt="untitled" width="358" height="151" /></p>
<p>Das Programm lässt sich dann überhaupt nicht mehr über die advertised Shortcuts aufstarten.</p>
<p><strong>Lösung</strong></p>
<p>Falls die „Special Folders“ nicht dringend benötigt  werden, also z.B keine Dateien in diesen Ordnern platziert werden müssen, sollte man diese aus der Directory Table löschen.<br />
Der Windows Installer wird dann beim Self-Healing/Active Setup nicht mehr versuchen diese zu überprüfen.</p>
<p>Fabio Di Lorenzo<br />
Member of the Ontrex SPA Team</p>
]]></content:encoded>
			<wfw:commentRss>http://spablog.ontrex.ch/2009/06/11/folder-redirection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
