C# 如何在powershell调用[System.Environment]::退出(1)的情况下保持Asp.Net web应用程序运行
我目前正在C#中构建一个Asp.Net核心web应用程序。web应用程序需要调用我无法编辑或修改的预先存在的powershell脚本。我这样称呼脚本:C# 如何在powershell调用[System.Environment]::退出(1)的情况下保持Asp.Net web应用程序运行,c#,powershell,asp.net-core,exit,C#,Powershell,Asp.net Core,Exit,我目前正在C#中构建一个Asp.Net核心web应用程序。web应用程序需要调用我无法编辑或修改的预先存在的powershell脚本。我这样称呼脚本: using (var pwsh = PowerShell.Create()) { string script = $"Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process; cd \"{directory}\"; .\\script.ps1&qu
using (var pwsh = PowerShell.Create())
{
string script = $"Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process; cd \"{directory}\"; .\\script.ps1";
var results = pwsh.AddScript(script).Invoke();
}
这在很大程度上没有任何明显的问题。但是,当脚本抛出错误时会出现问题。脚本中有一个全局捕获,如下所示:
catch
{
[System.Environment]::Exit(1)
}
当进入这个catch块时,对Environment.Exit的调用会导致整个网站崩溃-这不是我想要的行为。我想知道这是否是真的(同样不改变脚本)。正如Keith Nicholas所说,我们可以尝试启动一个进程来运行powershell脚本 关于如何运行powershell脚本,我建议您可以尝试参考以下示例代码:
if (System.IO.File.Exists("your powshell script path"))
{
string strCmdText = "your powshell script path";
var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe";
process.StartInfo.Arguments = "\"&'" + strCmdText + "'\"";
process.Start();
string s = process.StandardOutput.ReadToEnd();
process.WaitForExit();
}
生成一个进程来运行脚本