目前,我有一个简单的函数,它使用运行空间和管道从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未在相同的“上下文”中分配。