来自C#的Powershell进程';t完成
本文关键字:完成 进程 Powershell 来自 | 更新日期: 2023-09-27 18:20:22
我正试图用Powershell作为进程从C#运行一个PS脚本,如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = configFile.AppSettings.Settings["PSDir"].Value.ToString() + @"'powershell.exe";
startInfo.Arguments = @"& '" + scriptPath + "''"";
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
return process;
我这样称呼这种方法:
Process proc = RunPSScript(startupPath + "''stats.ps1");
proc.WaitForExit();
程序卡在:
proc.WaitForExit();
我可以看出脚本的最初部分已经完成,但除此之外什么都没有。脚本并不是坏的,因为我在代码之外运行了它,它运行得非常好。
当我删除WaitForExit()时,进程调用立即存在,程序继续运行,但这不好,因为我需要让脚本生成数据,然后程序的其余部分才能继续运行。
奇怪的是,如果我在启动PS调用后结束调试会话,脚本就会继续运行,而锁定它完成的东西现在都不见了,它会继续运行到完成。
任何想法都值得赞赏。
谢谢!
要检查的两件事是,您的参数的确切输出是什么?假设以管理员身份从CMD提示符下运行相同的脚本,并查看是否有相同的结果。您还可以将超时值传递给等待退出(以毫秒为单位)。试试这个:
RunPSScript(startupPath + "''stats.ps1").WaitForExit();