在运行空间

时间:2018-03-14 09:30:44

标签: c# powershell runspace

目前,我有一个简单的函数,它使用运行空间和管道从C#执行powershell中的批处理文件。这工作正常,但此批处理文件执行.exe。但是,我需要能够取消命令并取消批处理文件不会取消exe。

我的批处理文件只是软件所需的init 2变量,然后执行exe命令,返回exe返回的代码。

我的批处理文件如下所示:

set EVOLPATH=...
set CTLIBPATH=...
set path=%EVOLPATH%;%CTLIBPATH%;%UGII_ROOT_DIR%
C:\path\to\my\file.exe %*
exit %errorlevel%

这是我的c#代码的简化版本

Runspace _runSpace = RunspaceFactory.CreateRunspace();
_runSpace.Open();
String _command = "..."
Pipeline _pipePwShell = _runSpace.CreatePipeline(_command);
_pipePwShell.Input.Close();
_pipePwShell.InvokeAsync();
Boolean _end = false;
while (!_end)
{
    if (token.IsCancellationRequested)
    {
          _pipePwShell.StopAsync();
          _end = true;
    }
    if (_pipePwShell.Output.Count > 0)
    {
          Int32 _returnCode = Convert.ToInt32(_pipePwShell.Output.Read().ToString());
    }
}

当前代码工作正常,启动.bat并在取消时将其杀死,但是杀死.bat不会杀死.exe启动,这是我的问题。

这引出了我的问题:如果我需要在运行.exe之前执行前3行分配变量,我应该怎么做:

在管道中添加命令并执行它们是否足够?

我真的不明白什么是运行空间和管道,我找不到真正清楚的解释。根据名称,我会假设运行空间将创建一个“上下文”,我将能够分配我的变量,然后运行.exe而不会丢失变量?

当我尝试在PowerShell中逐步执行此操作时,exe将无法运行,因为vars未在相同的“上下文”中分配。

0 个答案:

没有答案