我有一个Windows服务,它在服务主函数中创建一个命名管道。代码段如下:
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
DWORD status;
DWORD specificError;
m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
m_ServiceStatusHandle = RegisterServiceCtrlHandler("myService",
ServiceCtrlHandler);
if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
{
return;
}
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
{
}
CraeteNamedPipe();
return;
}
CraeteNamedPipe
函数创建一个命名管道\\.\pipe\1stPipe
。
我能够在我的XP机器上成功安装和运行我的服务
现在,我如何使用其他程序访问namedpipe \\.\pipe\1stPipe
。
任何代码段或示例文章都会有所帮助。
答案 0 :(得分:1)
我希望您不仅可以使用CreateNamedPipe,还可以使用ConnectNamedPipe。将Security and Access Rights设置为管道(请参阅CreateNamedPipe的lpSecurityAttributes
参数)以便能够与另一个用户创建的管道进行通信(如果您创建管道的典型情况)也非常重要在Windows服务内部并在服务之外使用。)
要从客户端连接到管道,可以使用CreateFile或CallNamedPipe取决于type mode(另请参阅Can you explain in more detail what's the difference between PIPE_READMODE_MESSAGE/PIPE_READMODE_BYTE?)。
在消息类型管道中,通常使用CallNamedPipe或TransactNamedPipe(请参阅http://msdn.microsoft.com/en-us/library/aa365789.aspx作为示例)。在字节类型管道中,使用关于ReadFile和WriteFile的标准读/写文件操作。
使用管道的不同示例,您可以找到here。
答案 1 :(得分:0)
快速搜索得到了这些结果: