【发布时间】:2015-07-10 10:24:23
【问题描述】:
我正在尝试使用 .net NamedPipeServerStream 在 powershell 中使用回调异步使用命名管道。
我目前正在使用以下代码:
服务器端:
$myCallback = [AsyncCallback]{
"Connected"
}
$pipe = New-Object System.IO.Pipes.NamedPipeServerStream("alert", [System.IO.Pipes.PipeDirection]::InOut, 1, [System.IO.Pipes.PipeTransmissionMode]::Message, [System.IO.Pipes.PipeOptions]::Asynchronous)
$pipe.BeginWaitForConnection($myCallback, "alertCallback")
客户端:
$pipe = new-object System.IO.Pipes.NamedPipeClientStream("alert");
$pipe.Connect(3000);
$sw = new-object System.IO.StreamWriter($pipe);
$sw.WriteLine("Test");
我先调用服务端代码,报回调注册成功
AsyncState IsCompleted AsyncWaitHandle CompletedSynchronously
---------- ----------- --------------- ----------------------
alertCallback False System.Threading.ManualRese... False
只要调用客户端代码,powershell 服务器脚本就会崩溃 - 不会引发异常,只是我得到一个“Powershell 已停止工作”的 windows 样式错误框。我不知道为什么会发生这种情况,而且我似乎无法从脚本中获得任何异常或其他调试信息来了解出了什么问题。如果我尝试同步做同样的事情,一切都会按预期工作。非常感谢任何帮助。
【问题讨论】:
-
客户端上的 Windows 日志中的任何内容?
-
很遗憾没有。我一直在查看事件日志的 Powershell 部分,我可以看到我知道的异常条目,并且已经从之前尝试编写上述代码的失败中报告给控制台,所以我认为这是正确的地方。
-
您可以使用 sysinternals 的 procdump 让它在发生异常时创建转储文件。像
procdump -ma -e 100 <PID>这样的东西。有了故障转储后,您可以开始使用 WinDbg 进行调查。
标签: .net powershell asynchronous named-pipes