2016-03-24 6 views
1

nicht aufrufen Ich versuche, die Startmethode eines System.Diagnostics.Process aufzurufen. Ich habe viele andere Beispiele im Internet gesehen jedoch, dass genau das gleiche tun, wenn ich meinen Code ausführen:Konnte dotnet Methoden von Powershell

$process = new-object System.Diagnostics.Process 

$config.variables.properties | foreach { 
    $process.StartInfo.EnvironmentVariables.Set_Item($_.name, $_.value) 
} 

$process.StartInfo.UseShellExecute = false; 
$process.StartInfo.FileName = "C:\Program Files\IIS Express\iisexpress.exe" 
$process.StartInfo.Arguments = "/config:$configPath\${name}ApplicationHost.config \site:$name" 

$process.Start() 

ich diesen sinnlosen Fehler:

Exception calling "Start" with "0" argument(s): "The parameter is incorrect" 
At C:\Users\critc\Source\run-iisexpress.ps1:67 char:1 
+ $started = $process.Start() | Out-Null 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : Win32Exception 

Diese Methode hat einen Parameter 0 Überlastung. Infact, wenn ich die Klammern aus dem Aufruf von Powershell fallen in es unendlich ist Weisheit sagt mir Theres eine Null Parameter Überlastung

OverloadDefinitions 
------------------- 
bool Start() 

Powershell mich ist Trolling! Ursprünglich war ich eine Process Instanz erstellen und versuchen, es auf die statische Process.Start Methode zu übergeben, und ich war die gleichen Fehler (außer es with "1" argument(s) sagte)

UPDATE

Heres Code meines aktualisiert, die funktionieren.

$process = new-object System.Diagnostics.Process 

Get-Member -inputObject $config.variables -memberType Properties | foreach { 
    $value = $config.variables | select -exp $_.name 
    $process.StartInfo.EnvironmentVariables.Set_Item($_.name, $value) 
} 

$process.StartInfo.UseShellExecute = $false 
$process.StartInfo.FileName = "C:\Program Files\IIS Express\iisexpress.exe" 
$process.StartInfo.Arguments = "/config:`"$configPath\${name}ApplicationHost.config`" /site:$name" 

$started = $process.Start() 
if ($started) { 
    $process.WaitForExit() 
} 
+1

$ process.StartInfo.UseShellExecute = false sollte process.StartInfo.UseShellExecute $ = $ false, sollte es nicht? –

+0

@DavidBrabant ja du bist richtig, wie das scheint nicht die Ursache meiner Leiden gewesen zu sein – Sam

+0

hier ist alles wie ein Geist, wenn jemand interessiert - https://gist.github.com/worldspawn/ed3e16accbdefaa8ee35 – Sam

Antwort

1

Etwas sagt mir, Ihre Parameter falsch sind, und Sie haben einen Platz in $configPath. Aber das ist nur eine Ahnung ... Es wäre besser, wenn Sie in Ihrer Frage Werte von $configPath und $name liefern würden.

Was passiert, wenn Sie verwenden:

$process.StartInfo.Arguments = "/config:`"$configPath\${name}ApplicationHost.config`" /site:`"$name`"" 
+0

Ich machte diese Änderung Ich bemerkte auch, dass mein Website-Schrägstrich in die falsche Richtung ging. Aber das hat das Problem nicht gelöst, aber es hat mich dazu gebracht zu denken, ich sollte versuchen, die anderen Zeilen des Setups zu kommentieren und zu sehen, ob sich etwas ändert. Es stellt sich heraus, dass die variablen Zeilen meiner Umgebung das Problem irgendwie verursachen. – Sam

+1

Meine Umgebungsvariable Schleife wurde komplett unterbrochen: D Das passiert, wenn Sie Paste aus dem Internet kopieren! Es hat leere benannte Variablen gesetzt. Ich habe meine Antwort mit der korrigierten Schleife aktualisiert, Sie haben mich auf den richtigen Weg gebracht, damit Sie die Punkte haben können. Vielen Dank – Sam