我不知道为什么会收到ERROR_NOT_FOUND
/ 1168(0x490)错误代码。如果将GetNamedPipeClientProcessId
替换为GetNamedPipeServerProcessId
,则可以成功获取服务器的进程ID。
代码:
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out int ClientProcessId);
int GetNamedPipeClientProcessId(NamedPipeServerStream pipeServer)
{
var hPipe = pipeServer.SafePipeHandle.DangerousGetHandle();
if (GetNamedPipeClientProcessId(hPipe, out var clientProcessId))
{
return clientProcessId;
}
else
{
var error = Marshal.GetLastWin32Error();
return 0;
}
}
在客户端调用GetNamedPipeClientProcessId
或CallNamedPipe
连接到名称管道后,您需要调用CallNamedPipe
。如果客户端尚未连接到名称管道,则CreateFile
将失败,并显示CreateFile
(0x490)。