Ich schreibe eine WXS-Datei für ein Paket, das ich installieren möchte. Der Einfachheit halber nehmen wir an, ich möchte eine Datei installieren und dann einen Befehl gegen sie ausführen (in meinem Fall ist es ein öffentlicher GPG-Schlüssel, den ich nach der Installation importieren möchte). Hier sind die relevanten Teile meiner WXS-Datei:
<CustomAction Id="ImportKey" Directory="INSTALLDIR"
ExeCommand="[SystemFolder]cmd.exe /C gpg --import keyfile.key"
Return="check" />
<!-- Install file keyfile.key into C:\GnuPG -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="GnuPG">
<Component Id="GnuPGConfiguration" Guid="E9469F1C-A875-1014-A3B3-DEF3264B13C4">
<File Name="keyfile.key" Id="KeyfileKey" />
</Component>
</Directory>
</Directory>
<Feature Id="GnuPGConfiguration" Level="1" Title="GnuPG Configuration">
<ComponentRef Id="GnuPGConfiguration" />
</Feature>
<!-- Run custom action after files are installed -->
<InstallExecuteSequence>
<Custom Action="ImportKey" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
Ich kann das MSI erfolgreich erstellen. Bei der Installation verwende ich msiexec und aktiviere die Protokollierung. Dort steht, dass die Installation bei der benutzerdefinierten Aktion fehlschlägt, und der richtige Befehl wird im Protokoll gefunden. Das manuelle Ausführen des Befehls funktioniert. Wenn ich die Ausführung des Befehls auskommentiere, wird die Datei an der richtigen Stelle installiert ( C:\GnuPG\keyfile.key nach der Installation vorhanden ist).
Anstatt meinen GPG-Befehl auszuführen, habe ich versucht, dir ant auszuführen und die Ausgabe in eine Datei umzuleiten. Ich kann sehen, dass keyfile.key nicht unter den Dateien in C:\GnuPG. Es scheint, dass der Befehl ausgeführt wird, bevor die Datei installiert wird.
Hat jemand eine Idee, was ich falsch mache?