Wie Ausfall einer benutzerdefinierte Aktion in einem MSI / Setup-Projekt debuggen
Frage
Für eine benutzerdefinierte Aktion, Ich gründe auf XmlPreprocess.exe auf Namen (ein CodePlex-Dienstprogramm)
und Argumente: / x: "[Settings]" /i:"[TARGETDIR]web.config“/ e: [ENVIRONMENTBUTTON] [Custom]> [TARGETDIR] XmlPreProcess.log
Settings soll aus einer benutzerdefinierten Formularseite zu kommen ich hinzu, und ENVIRONMENTBUTTON ist der Wert eines meiner Radio-Buttons.
Gibt es eine Möglichkeit die Umleitung zur Arbeit zu kommen? Es ist nicht die .log-Datei zu erstellen. Gibt es eine andere Art und Weise die Ergebnisse der benutzerdefinierten Aktion zu sehen? Wie kann ich auch bestätigen, wenn es läuft? Was passiert, wenn ich möchte was parms sehen waren sie geschickt?
Update 3: - Für weitere Szenarien, was ich versucht habe, sehen Sie hier: http://xmlpreprocess.codeplex.com/Thread/View.aspx?ThreadId= 79.454
Danke,
Neal
Update: Ich schrieb einen Quickie VBScript meine parms zu überprüfen.
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 VBScriptout.txt wurde erstellt, so dass ich nicht denke, es läuft sogar (so meine Vermutung ist, wird die XmlPreprocess nicht einmal entweder ausgeführt wird).
I umfasste die InstalLVerification.vbs Datei als benutzerdefinierte Aktion unter „Installieren“. Ich habe die Bedingung = True im Eigenschaftenfenster. Ich habe Custom zu: "[Settings]" [ENVIRONMENTBUTTON]
Update 2: Ich erkennen jetzt Zustand sollte nicht sein „True“. Ich entweder leer es aus oder setzt sie auf „nicht installiert“.
Ich erhalte einen unerklärlichen Fehler auf XmlPreprocess, und ich kann das VBScript ausführt nicht bekommen. Ich versuchte es auch mit CScript64.exe läuft.
Lösung
Nur die Eingabeaufforderung (und gelegentlich andere Tools) verwenden die Größer-als-Symbol Ausgabeumleitung anzuzeigen. Windows Installer ruft nur den Win32-API Createprocess, die nicht mit diesem Symbol nicht verarbeitet. So kann Ihr Versuch, die Ergebnisse zu protokollieren wird nicht funktionieren. Vielleicht können Sie Ihren Befehl umschreiben wie cmd.exe /c XmlPreprocess.exe /x ... > [TARGETDIR]XmlPreprocess.log
aussehen (einige zusätzliche Angabe erforderlich sein).
Für die Zwecke der Fehlersuche können Sie in der Regel viel mehr Informationen erhalten, indem ein ausführliches Protokoll des Installationsprozesses nehmen. Es wird eine Liste der Eigenschaften umfasst, und von benutzerdefinierten Aktionen, die es ins Leben gerufen und ihre Rückgabecodes. Ich denke, es wird sogar die vollständig formatierte Befehlszeile für die Anwendung in Ihrem Fall übergeben ist.
Wie Sie in Update 2 sagen, beachten Sie, dass eine Bedingung der True
bedeutet tatsächlich bis zu schauen, ob eine Eigenschaft des Namens True
definiert ist. Wenn Sie wollen etwas, das immer wahr ist, verwenden Sie den Wert 1
.