Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell和C#ASP.NET之间的管道_C#_Asp.net_Windows_Powershell_Named Pipes - Fatal编程技术网

PowerShell和C#ASP.NET之间的管道

PowerShell和C#ASP.NET之间的管道,c#,asp.net,windows,powershell,named-pipes,C#,Asp.net,Windows,Powershell,Named Pipes,我很难将数据从PowerShell脚本传输到C#程序 ,我已经为两个PowerShell脚本(Sender.ps1和Receiver.ps1)之间的管道数据提出了一个可行的解决方案 问题是,此脚本在翻译为C#代码时无法工作。 即使我通过PowerShell类在C#中调用Receiver.ps1,它仍然不起作用 这让我相信管道的名称空间是不一样的,但是当我尝试将Global添加到每个管道的开头时,它没有做任何事情。同样,如果我作为PowerShell脚本运行,它可以在两个.ps1中工作,但是如果我

我很难将数据从PowerShell脚本传输到C#程序

,我已经为两个PowerShell脚本(
Sender.ps1
Receiver.ps1
)之间的管道数据提出了一个可行的解决方案

问题是,此脚本在翻译为C#代码时无法工作。 即使我通过
PowerShell
类在C#中调用
Receiver.ps1
,它仍然不起作用

这让我相信管道的名称空间是不一样的,但是当我尝试将
Global
添加到每个管道的开头时,它没有做任何事情。同样,如果我作为PowerShell脚本运行,它可以在两个
.ps1
中工作,但是如果我从C#调用其中一个脚本,或者直接将其转换为C#,它将完全停止工作

有人知道Windows中的名称空间和管道吗?


Sender.ps1:除了通过管道发送数据外,不与C#程序交互

## Establish Pipe
  $pipe = New-Object System.IO.Pipes.NamedPipeClientStream("Global\\.pipe\brokenPipe");
  $pipe.Connect();
  $stream = New-Object System.IO.StreamWriter($pipe);

## Communicate through Pipe
  SendStuff();

## Close Pipe
  $stream.Dispose();
  $pipe.Dispose();

Receiver.ps1:用于从管道读取数据的PowerShell程序<如果我右键单击并作为PowerShell运行,strong>将起作用不起作用如果我通过C的PowerShell调用它,它只会挂起在
WaitForConnection()
。C#程序正确地调用了脚本,我用一个充满信息的虚拟文件(C#正确地读取了该文件)对此进行了测试。由于某种原因,管道在通过我的C#应用程序运行时停止工作

## Establish Pipe
  $pipe = new-object System.IO.Pipes.NamedPipeServerStream("Global\\.pipe\brokenPipe");
  $pipe.WaitForConnection();
  $stream = new-object System.IO.StreamReader($pipe);

## Communicate through Pipe
  ReadStuff();

## Close Pipe
  $stream.Dispose();
  $pipe.Dispose();

C#Receiver Function:我将此作为
PowerShell.Create()
的替代品,但它也不起作用(即使它的代码与
Receiver.ps1
完全相同)

void PipeListener(){
## Establish Pipe
  var pipe = new System.IO.Pipes.NamedPipeServerStream("Global\\.pipe\brokenPipe");
  pipe.WaitForConnection();
  var stream = new System.IO.StreamReader(pipe);

## Communicate through Pipe
  ReadStuff();

## Close Pipe
  stream.Dispose();
  pipe.Dispose();
}

全局命名空间前缀是
global\
,而不是
global\\
。不需要在Powershell中转义反斜杠

  • Powershell:
    Global\pipename
  • C:
    @“Global\pipename”
    “Global\\pipename”

全局命名空间前缀是
global\
,而不是
global\\
。您不需要在Powershell中转义反斜杠。同样,Powershell:
global\pipename
,C#:
@“global\pipename”
“global\\pipename”
。谢谢@Mitch,这确实是个问题。如果你将此作为官方答案发布,我将为你接受。谢谢。我在PowerShell中避开了反斜杠……谈谈新手犯的错误!