Der Kopierbefehl funktioniert nicht mit der benutzerdefinierten Aktion von Wix
Frage
Ich habe Folgendes CustomAction
:
<CustomAction Id="CopyToSystem32" ExeCommand="copy /y 64bits.txt C:\Windows\System32" Directory="INSTALLFOLDER" Impersonate="no" Execute="deferred" Return="asyncWait" />
<InstallExecuteSequence>
<Custom Action="CopyToSystem32" After="InstallFiles" >VersionNT64</Custom>
</InstallExecuteSequence>
Wenn es also ein 64-Bit-Betriebssystem erkennt, kopiert es eine Datei in den System32-Ordner.Wenn ich es mit einer .bat-Datei ausführe, funktioniert es einwandfrei.Aber ich würde es vorziehen, wenn es ein Batch-Befehl wäre.
Im Protokoll steht folgendes:
MSI (s) (74:AC) [10:08:33:473]: Executing op: ActionStart(Name=CopyToSystem32,,)
Action 10:08:33: CopyToSystem32.
MSI (s) (74:AC) [10:08:33:473]: Executing op: CustomActionSchedule(Action=CopyToSystem32,ActionType=3234,Source=C:\Program Files (x86)\SetupProject\,Target=copy /y 64bits.txt C:\Windows\System32,)
MSI (s) (74:AC) [10:08:33:474]: Executing op: ActionStart(Name=RegisterProduct,Description=Registering product,Template=[1])
Action 10:08:33: RegisterProduct. Registering product
MSI (s) (74:AC) [10:08:33:474]: Executing op: ChangeMedia(,MediaPrompt=Please insert the disk: ,MediaCabinet=1\cab1.cab,BytesPerTick=0,CopierType=1,,,SignatureRequired=0,,,IsFirstPhysicalMedia=1)
MSI (s) (74:AC) [10:08:33:474]: Executing op: DatabaseCopy(DatabasePath=C:\Windows\Installer\32ea43.msi,ProductCode={0C013216-61FB-4283-AF0A- 6CB264019F5B},,,)
MSI (s) (74:AC) [10:08:33:474]: Note: 1: 1402 2: UNKNOWN\Products\612310C0BF163824FAA0C62B4610F9B5\InstallProperties 3: 2
1: CopyToSystem32 2: 1631
Irgendeine Idee, warum mein ExeCommand
Kopiert meine Datei nicht?
Danke!
Lösung
so viel ich weiss copy
ist Teil des Befehls-Shell-Interpreters und kein eigenständiger Befehl.Z.B. Sie können dies überprüfen, wenn Sie z.B.mach ein dir copy.* /s
im Windows
-Ordner.Es gibt keine Datei, die unabhängig implementiert wird copy
.Was du tun kannst:Stellen Sie den Aufruf des Befehlsinterpreters voran, z. B.:
cmd /c copy /y 64bits.txt C:\Windows\System32
Der /c
-Parameter weist den Interpreter an, nach der Ausführung zu schließen (Sie können auch den verwenden [%COMSPEC]
-Umgebungsvariable statt cmd
).Sie können auch die verwenden CAQuietExecute
Benutzerdefinierte Aktion, um das cmd-Popup zu verhindern, wie beschrieben Hier.
Vielleicht könnten Sie auch einfach das verwenden CopyFile
-Element für Ihre Aufgabe?Auf diese Weise müssen Sie sich nicht mit dem Shell-Fenster usw. befassen.