Como depurar a falha de uma ação personalizada em um projeto MSI/Setup
Pergunta
Para uma ação personalizada, estou configurando o nome para xmlpreprocess.exe (um utilitário codeplex)
e argumentos para: /x: [SettingSFile] /i:"tartargetdir] web.config " /e: [EnvironmentButton] [CustomSettings]> [TargetDir] xmlpreprocess.log
O SettingSFile deve vir de uma página de formulário personalizada que eu adicionei, e o AmbientButton é o valor de um dos meus botões de rádio.
Existe alguma maneira de fazer o redirecionamento funcionar? Não está criando o arquivo .log. Existe alguma outra maneira de ver os resultados da ação personalizada? Como posso confirmar se foi executado? E se eu gostaria de ver quais parâmetros foram enviados para ele?
Atualização 3: - Para mais cenários do que eu tentei, veja aqui:http://xmlpreprocess.codeplex.com/thread/view.aspx?threadid=79454
Obrigado,
Neal
ATUALIZAÇÃO: Acabei de escrever um VBScript rápido para verificar meus parms.
dim fso, oFile
set fso = Createobject("Scripting.FileSystemObject")
set oFile = fso.CreateTextFile("VBScriptOut.txt")
if WScript.Arguments.Count < 2 then
oFile.Writeline("Number of arguments was only = " & WScript.Arguments.Count)
else
oFile.WriteLine("SETTINGSFILE=" & WScript.Arguments.Item(0))
oFile.WriteLine("ENVIRONMENTBUTTON=" & WScript.Arguments.Item(1))
end if
oFile.close
Nenhum vbscriptout.txt foi criado, então acho que nem sequer foi executado (então meu palpite é que o XMLPreprocess também não está sendo executado).
Incluí o arquivo installVerification.vbs como uma ação personalizada em "Install". Defino a condição = true na janela Propriedades. Defino o CustomActionData para: [SettingSFile] [EnvironmentButton
ATUALIZAÇÃO 2: Eu percebi que agora a condição não deveria ser "verdadeira". Eu em branco ou configuro -o como "não instalado".
Estou recebendo um erro inexplicável no XMLPreprocess e não consigo executar o VBScript. Tentei executá -lo também com cscript64.exe.
Solução
Somente o prompt de comando (e outras ferramentas ocasionais) usa o símbolo maior do que o que indica redirecionamento de saída. O Windows Installer chama apenas a API Win32 CreateProcess, que não processa esse símbolo. Assim, sua tentativa de registrar os resultados não funcionará. Talvez você possa reescrever seu comando de parecer cmd.exe /c XmlPreprocess.exe /x ... > [TARGETDIR]XmlPreprocess.log
(Alguma citação extra pode ser necessária).
Para fins de depuração, geralmente você pode obter muito mais informações, obtendo um log detalhado do processo de instalação. Ele incluirá uma lista de propriedades e de ações personalizadas lançadas e seus códigos de retorno. Eu acho que incluirá até a linha de comando totalmente formatada passada para o aplicativo no seu caso.
Como você diz na atualização 2, observe que uma condição de True
Na verdade, significa procurar se uma propriedade do nome True
é definido. Se você quer algo que seja sempre verdadeiro, use o valor 1
.