Futter für Custom Actions
Hin und wieder werde ich gefragt, wie man denn in einer Installer-Klasse den Pfad ermitteln kann, in dem die Anwendung gerade installiert wird.
Dazu vielleicht ein wenig ausgeholt: Der Windows Installer kennt sogenannte Custom Actions. Dabei handelt es sich um selbst geschriebenen Code, welcher während der Installation ausgeführt wird. Unter .NET können wir diese Custom Actions mit managed Code schreiben, als sog. Installer Class.
Prinzipiell gibt es 4 Custom Actions, die wir verwenden können: Install, Commit, Rollback und Uninstall. Install und Commit werden während der Installation zu verschiedenen Zeiten ausgeführt. Rollback, wenn etwas schief läuft und alles auf den Ausgangszustand zurückgesetzt werden muß. Hier sollte auch alles wieder entfernt werden, was in den vorangegangenen Custom Actions erzeugt wurde. Und Uninstall ist wohl selbsterklärend.
Um bspw. Den Installationspfad zu ermitteln, können wir Properties des Windows Installers verwenden, in diesem Falle TARGETDIR. Auf diese Variable schreibt der MSI den bei der Installation ausgewählten Pfad. Über die Property CustomActionData der ausgewählten Custom Action wird ein Parameter deklariert, auf welchen dann der Inhalt von TARGETDIR geschrieben wird: /InstallPath="[TARGETDIR]"
Zugegriffen werden kann auf diesen über die Parameters Collection des Context-Objekts:
Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary)
Dim sInstallPath As String = Me.Context.Parameters("InstallPath")
...
MyBase.Commit(savedState)
End Sub
Am Ende nicht vergessen, die entsprechende Methode des Basisobjekts aufzurufen, es sei denn Sie übernehmen die komplette Steuerung der Custom Action.
Prinzipiell können alle public Properties (die in Großbuchstaben) verwendet werden.