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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top