Hallo,
ich bastel einen Install-Dialog mit WiX. Am Ende des Setups soll ein Powershell-Skript laufen, dass den Installpfad übergeben bekommen braucht. Wie geht das?
Das Ausführen von Powershell-Skripten funktioniert. Nur wie man Argumente übergibt, weiß ich nicht.
*edit*
Lösungshinweis: Silently executing a PowerShell script from WiX Hangs PowerShell
Hi,
das geht mit dem param-Statement. Nur eben nicht in einer Funktion, sondern direkt im Skript.
Da kannst du dann natürlich auch Default-Werte festlegen und auch nen ExceptionWurf reinnehmen, wenn der Parameter "pflicht" ist und du nen ordentlichen Text zurückgeben willst. Beispielsweise:
param([int] $myFirstParam = $(throw "Please tell me a number!"))
Write-Host "You told me $myFirstParam."
beste Grüße
zommi
*edit*
nun weiß ich, wie du das gemeint hast. Habe einen Link in den Startpost editiert.
Hallo,
es geht mir wirklich nur um das Problem, wie ich das Argument im WiX-Code an das Skript weiterreiche.
der entsprechende WiX-Code sieht bspw. so aus
<CustomAction Id="CATest" Property="POWERSHELLEXE" ExeCommand="-NoLogo -NoProfile -NonInteractive -File "C:\Test.ps1"" Return="check" Execute="immediate" />
<InstallExecuteSequence>
<Custom Action="CATest" After="ProcessComponents">NOT Installed</Custom>
</InstallExecuteSequence>
ein Test PS-Skript kann so aussehen. (Es schreibt aktuelle Prozesse in eine Datei. Der voll Dateipfad soll per Argument übergeben werden.)
Get-Process | Out-File -Encoding ASCII -FilePath $args[0]
Die Frage ist nur wie ich args[0] übergebe. (Im konkreten Fall wird es das vorher gewählte Installationsverzeichniss sein.)
Schon mal mit [PROPERTY_NAME] im ExeCommand-Attribut versucht.
Also z.B.:
ExeCommand="-File [INSTALLDIR]"
ja genau so geht das und zommi zeigt auch ein beispiel, wie der entsprechende powershell code gestaltet werden kann.
ich hatte ein brett vor dem kopf und wollte ewig nicht verstehen, dass die kommunikation so einfach ist 😃