2013-07-10 22 views
6

Ich möchte ein Befehlszeilenprogramm von OpenOffice in WiX aufrufen. Dazu habe ich eine benutzerdefinierte Aktion, wie unten zu sehen:So rufen Sie ein Befehlszeilenprogramm in WiX

<CustomAction Id="ca_RunOpenOfficeProgram" Return="check" Directory="TARGETDIR" ExeCommand="cmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot;" /> 

Die benutzerdefinierte Aktion wird in einer Installation ausführen Reihenfolge ausführen:

<InstallExecuteSequence>    
    <Custom Action="ca_RunOpenOfficeProgram" Before="InstallFinalize" /> 
</InstallExecuteSequence> 

Wenn die resultierende MSI-Datei ausgeführt wird, erhalte ich die folgende Fehlermeldung in einer Befehlszeile:

Invalid command 'C:\OpenOffice.org3\program\unopkg.com' could not be found. 

Nun, natürlich ist der Befehl zur Verfügung, und ich kann es von der Kommandozeile ausgeführt werden. Aber es funktioniert einfach nicht, wenn die Kommandozeile von WiX aufgerufen wird. Es ist auch bemerkenswert, dass der Teil 'list --shared' vollständig ignoriert wird.

Weiß jemand, was hier vor sich geht?

Antwort

0

die Lösung für mein Problem gefunden:

1) In Bezug auf Toms Post in meiner Antwort geschrieben, hatte ich in Tippfehlern in der Befehlszeile ... dumm.

2) Die Zitate der Kommandozeilenaufruf in Bezug hatte verlegt worden (Toms Antwort)

3) Ich fand heraus, dass Laufen ‚unopkg.com‘ mit dem Parameter ‚shared‘ nur dann ausgeführt wird, wenn die Befehlszeile abgearbeitet wird mit Verwaltungsrechten.Ich dachte, dass das Attribut 'impersonated = "yes"' in meiner CustomAction genügen würde, aber es hat nicht geholfen. Ich denke, ich muss tiefer in die Dokumentation von WiX bezüglich UAC eintauchen.

Danke auch an Ralf. Ich habe seine Lösungen nicht versucht, aber Sie könnten es versuchen.

5

Ich würde empfehlen, die ShellExecute custom action aus dem WiX-Toolset zu verwenden. Hier

ist der Beispielcode:

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" /> 
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 

Ändern der Value der Immobilie WixShellExecTarget-cmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot; und es sollte funktionieren.

3

Sind Sie sicher, dass cmd.exe /K "C:\OpenOffice.org3\program\unopgk.com list --shared" funktioniert? Anscheinend haben Sie die Anführungszeichen an der falschen Stelle.

Und, wollen Sie wirklich das Konsolenfenster offen gehalten (/k)? Muss der Benutzer weitere Befehle eingeben, bevor die Installation fortgesetzt wird? Vielleicht möchten Sie stattdessen /c. Siehe die Hilfe mit cmd /?.

Wenn jedoch nur ein Befehl benötigt wird, führen Sie das Programm direkt aus.

ExeCommand="&quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared" 

Schließlich, wenn die oben ist der einzige Befehl benötigt und C:\OpenOffice.org3\program\unopgk.com unter der Annahme ist eine Konsolenanwendung, ein unnützes Konsolenfenster wird geöffnet. Dies kann mit der benutzerdefinierten Aktion WiX QtExecCmdLine vermieden werden.


Wenn Sie das Programm ausführen, Informationen zu sammeln, und es ist eine Konsolenanwendung, könnten Sie tun:

cmd /c &quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared >path\out.txt 

und andere benutzerdefinierte Aktion verwenden, um die Datei und Entscheidungen auf sie zu lesen oder Zeigen Sie es dem Benutzer in einem Windows Installer-Dialogfeld. Dies wäre eine bessere Erfahrung, als den Benutzer mit einem Konsolenfenster mit einer blinkenden Eingabeaufforderung zu verlassen, aus der er austreten muss.

+0

Hatte ich Tippfehler, heißt das Programm 'unopkg.com'. Korrigierte es sieht meine Custom wie folgt nun: '' Beim Ausführen der MSI erhalte ich die folgende Fehlermeldung: 'Es gibt ein Problem mit diesem Windows Installer-Paket. Ein Programm, das als Teil des Setups ausgeführt wurde, wurde nicht wie erwartet beendet. Wenden Sie sich an Ihren Support-Mitarbeiter [...] ' –

+0

Überprüfen Sie die Protokolldatei. Der Rückgabewert (Exit-Code) des Programms könnte wichtig sein. Zum Ausführen von msiexec mit Protokollierung siehe [hier] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa370536 (v = vs.85) .aspx). –

Verwandte Themen