O comando Copiar não está funcionando usando a Ação Personalizada Wix
Pergunta
Eu tenho o seguinte 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>
Portanto, quando detectar um sistema operacional de 64 bits, ele copiará um arquivo para a pasta System32.Se eu executá-lo com um arquivo .bat, funcionará bem.Mas eu preferiria que fosse um comando em lote.
O log diz o seguinte:
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
Alguma idéia de por que meu ExeCommand
não está copiando meu arquivo?
Obrigado!
Solução
Até onde sei copy
faz parte do interpretador do shell de comando e não é um comando por si só.Por exemplo, você pode verificar isso se, por exemplo.faça um dir copy.* /s
no Windows
-pasta.Não há nenhum arquivo que implemente de forma independente copy
.O que você pode fazer:acrescente a invocação do interpretador de comandos, por exemplo:
cmd /c copy /y 64bits.txt C:\Windows\System32
O /c
-parâmetro diz ao intérprete para fechar após a execução (você também pode usar o [%COMSPEC]
-variável de ambiente em vez de cmd
).Você também pode usar o CAQuietExecute
ação personalizada para evitar o pop-up do cmd, conforme descrito aqui.
Talvez você também possa usar o CopyFile
-elemento para sua tarefa?Dessa forma, você não precisa lidar com a janela do shell, etc.