0

我想将 PowerShell 功能添加到 C# 程序中,并且我已将程序system.managment.automation.dll集嵌入作为参考。我在 StackOverflow 上发现了两种从 C# 调用 PowerShell 脚本的方法:

  • 使用运行空间:

  • 使用运行空间:

    PowerShell powerShell = PowerShell.Create();
    powerShell.AddScript("my script");
    powerShell.Invoke();
    

根据这个网站,Powershell 实例似乎与其 C# 主机相关联。

Powershell 运行时作为运行空间调用,默认情况下,将同步处理命令并将处理结果传递给主机应用程序,以便它们可以返回给用户。

此外,PowerShell 脚本使用嵌入式system.managment.automation.dll程序集而不是系统范围的程序集,因此该脚本将在逻辑上停止其 C# 主机。

用户关闭我的程序后,Powershell 脚本是否仍会运行?那两种方法呢?

PS:我想支持 PowerShell v2。

4

1 回答 1

0

让我们以相反的时间顺序来看:

那两种方法呢?

没有通过“使用运行空间”来运行 powershell 代码这样的事情。

简单的解释就是runspace是一个核心前提——顾名思义,runspace就是powershell代码运行的空间

当你这样做时:

PowerShell powerShell = PowerShell.Create()

运行空间被隐式创建并附加到 PowerShell 实例。

唯一的区别是您只需将对 Runspace 创建的控制权交给 System.Management.Automation API,而不是自己实例化它。

用户关闭我的程序后,Powershell 脚本是否仍会运行?

主机应用程序终止后脚本将继续执行的唯一情况是当您连接到远程运行空间时,即。托管在另一个进程或另一台计算机上的运行空间。

否则,运行空间(隐式或非隐式)将在它退出时与宿主应用程序的其余部分一起被处置。

于 2016-07-25T21:22:07.980 回答