Cómo depurar el fracaso de una acción personalizada en un proyecto MSI / Configuración
Pregunta
Para una acción personalizada, Soy la creación de nombre a XmlPreprocess.exe (una utilidad CodePlex)
y argumentos a: / x: "[SETTINGSFILE]" /i:"[TARGETDIR]web.config"/ e: [ENVIRONMENTBUTTON] [CustomSettings]> [TARGETDIR] XmlPreProcess.log
SETTINGSFILE se supone que está viniendo de una página de formulario personalizado añadí, y ENVIRONMENTBUTTON es el valor de una de mis botones de radio.
¿Hay alguna manera de conseguir la redirección funcione? No es crear el archivo .log. ¿Hay alguna otra manera de ver los resultados de la acción personalizada? ¿Cómo puedo confirmar aún si funcionara? ¿Qué pasa si me gustaría ver lo que parms fueron enviados a ella?
Actualización 3: - Para más escenarios de lo que he tratado, ver aquí: http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId= 79454
Gracias,
Neal
Actualización: Acabo de escribir un polvo rápido VBScript para verificar mis 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
No se VBScriptout.txt fue creado, así que no creo que incluso corrió (así que yo creo es el XmlPreprocess ni siquiera está funcionando bien).
He incluido el archivo InstalLVerification.vbs como una acción personalizada en "Instalar". Me puse la condición = True en la ventana de propiedades. Puse CustomActionData a: "[SETTINGSFILE]" [ENVIRONMENTBUTTON]
Actualización 2: Me di cuenta ahora Estado no debe ser "verdadera". Yo ya sea en blanco hacia fuera o se establece en "no instalado".
Recibo un error inexplicable en XmlPreprocess, y no puedo conseguir el VBScript para ejecutar. Intenté funcionar también con CScript64.exe.
Solución
Sólo el símbolo del sistema (y de vez en cuando otras herramientas) utilizan el símbolo mayor que indicar redirección de la salida. Windows Installer sólo llama a la API de Win32 CreateProcess que no procesar este símbolo. Así, su intento de registrar los resultados no funcionará. Tal vez puede volver a escribir su comando para parecerse cmd.exe /c XmlPreprocess.exe /x ... > [TARGETDIR]XmlPreprocess.log
(se puede requerir un poco de sobrepeso citar).
Para propósitos de depuración, generalmente puede obtener mucha más información mediante la adopción de un registro detallado del proceso de instalación. Se incluirá una lista de las propiedades y de las acciones personalizadas se puso en marcha y sus códigos de retorno. Creo que va a incluir incluso la línea de comandos en su formato original pasa a la aplicación en su caso.
Como se dice en la actualización 2, tenga en cuenta que una condición de True
en realidad significa mirar hacia arriba si una propiedad del nombre True
se define. Si quieres algo que siempre es verdadera, utilice el valor 1
.