AnonymousPipeServerStream::GetClientHandleAsString Method ()
.NET Framework (current version)
Gets the connected AnonymousPipeClientStream object's handle as a string.
Assembly: System.Core (in System.Core.dll)
Return Value
Type: System::String^A string that represents the connected AnonymousPipeClientStream object's handle.
The DisposeLocalCopyOfClientHandle method should be called after a client handle has been passed to a client process. If this method is not called, the AnonymousPipeServerStream object will not receive notice when the client disposes of its PipeStream object.
The following example demonstrates a way to send a string from a parent process to a child process by using anonymous pipes. In this example, an AnonymousPipeServerStream object is created in a parent process with a PipeDirection value of Out.
#using <System.dll> #using <System.Core.dll> using namespace System; using namespace System::IO; using namespace System::IO::Pipes; using namespace System::Diagnostics; ref class PipeServer { public: static void Main() { Process^ pipeClient = gcnew Process(); pipeClient->StartInfo->FileName = "pipeClient.exe"; AnonymousPipeServerStream^ pipeServer = gcnew AnonymousPipeServerStream(PipeDirection::Out, HandleInheritability::Inheritable); // Show that anonymous pipes do not support Message mode. try { Console::WriteLine("[SERVER] Setting ReadMode to \"Message\"."); pipeServer->ReadMode = PipeTransmissionMode::Message; } catch (NotSupportedException^ e) { Console::WriteLine("[SERVER] Exception:\n {0}", e->Message); } Console::WriteLine("[SERVER] Current TransmissionMode: {0}.", pipeServer->TransmissionMode); // Pass the client process a handle to the server. pipeClient->StartInfo->Arguments = pipeServer->GetClientHandleAsString(); pipeClient->StartInfo->UseShellExecute = false; pipeClient->Start(); pipeServer->DisposeLocalCopyOfClientHandle(); try { // Read user input and send that to the client process. StreamWriter^ sw = gcnew StreamWriter(pipeServer); sw->AutoFlush = true; // Send a 'sync message' and wait for client to receive it. sw->WriteLine("SYNC"); pipeServer->WaitForPipeDrain(); // Send the console input to the client process. Console::Write("[SERVER] Enter text: "); sw->WriteLine(Console::ReadLine()); sw->Close(); } // Catch the IOException that is raised if the pipe is broken // or disconnected. catch (IOException^ e) { Console::WriteLine("[SERVER] Error: {0}", e->Message); } pipeServer->Close(); pipeClient->WaitForExit(); pipeClient->Close(); Console::WriteLine("[SERVER] Client quit. Server terminating."); } }; int main() { PipeServer::Main(); }
.NET Framework
Available since 3.5
Available since 3.5
Show: