2016-03-24 31 views
1

我正在尝试调用System.Diagnostics.Process的Start方法。我在网上看到很多例子这样做完全一样的但是当我跑我的代码:无法从PowerShell调用dotnet方法

$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() 

我得到这个毫无意义的错误:

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 

这个方法有一个0参数超载。 INFACT如果我从电话的PowerShell下降括号在它的无穷的智慧告诉我,那里有一个零参数超载

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

PowerShell是曳我!本来我是创建一个实例的ProcessStartInfo,并试图将它传递给静态的Process.Start方法和我得到了同样的错误(除非它说with "1" argument(s)

UPDATE

继承人我更新的代码工作的。

$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 =假应该是$ process.StartInfo.UseShellExecute = $假的,不应该吗? –

+0

@DavidBrabant是的,你是正确的这似乎并不是我的灾难的原因 – Sam

+0

这里的一切都作为一个要点,如果任何人有兴趣 - https://gist.github.com/worldspawn/ed3e16accbdefaa8ee35 – Sam

回答

1

东西告诉我你的参数是不正确的,你有​​的空间。但这只是一个预感......如果你在你的问题中提供了​​和$name的值,那会更好。

会发生什么事,如果你使用:

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

我做了这个改变,我也注意到我的网站斜线方向不对。然而,这并没有解决问题,但它让我想我应该尝试并注释掉其他设置行,看看是否有任何改变。事实证明,我的环境变量行在某种程度上导致了这个问题。 – Sam

+1

我的环境变量循环被完全破坏:D这就是当你从网上复制粘贴时会发生什么!它设置了空白的命名变量。我已经用更正后的循环更新了我的答案,让我走上了正确的道路,这样您就可以获得积分。谢谢 – Sam