我正在重写C#DLL,以将文件直接发送到驻留在同一台计算机上的c#可执行文件。 当前,该DLL基本上将文件保存到某个位置,然后可执行应用程序使用File.ReadAllText()命令选择该文件。
实现功能的最佳方法是什么?目前,我已经在C#中研究AnonymousPipes,并且能够轻松地通过管道将文本文件传输到可执行文件。例如,如果我要传输图像文件怎么办?
到目前为止,我已经尝试使用C#AnonymousPipes。
using (PipeStream pipeClient =
new AnonymousPipeClientStream(PipeDirection.In, args[0]))
{
pipeClient.ReadMode = PipeTransmissionMode.Message;
using (StreamReader sr = new StreamReader(pipeClient))
{
string myData = sr.ReadToEnd();
}
}
}
编辑:为进一步澄清,此DLL打开了可执行文件。
答案 0 :(得分:1)
下面是我想出的在DLL和可执行文件之间进行通信的内容。我对管道组件的概念还很陌生,不知道这是执行此任务的最佳方法,还是这种方法的不佳实践。
Process pipeClient = new Process();
pipeClient.StartInfo.FileName = @"Executable Location";
using (AnonymousPipeServerStream pipeServer =
new AnonymousPipeServerStream(PipeDirection.Out,
HandleInheritability.Inheritable))
{
pipeServer.ReadMode = PipeTransmissionMode.Byte;
// Pass the client process a handle to the server.
pipeClient.StartInfo.Arguments =
pipeServer.GetClientHandleAsString();
pipeClient.StartInfo.UseShellExecute = false;
pipeClient.Start();
pipeServer.DisposeLocalCopyOfClientHandle();
try
{
Byte[] bytes = File.ReadAllBytes(@"Location of Data File");
string file = Convert.ToBase64String(bytes);
// Read user input and send that to the client process.
using (StreamWriter sw = new StreamWriter(pipeServer))
{
sw.Flush();
sw.Write(file);
pipeServer.WaitForPipeDrain();
}
}
// Catch the IOException that is raised if the pipe is broken
// or disconnected.
catch (IOException a)
{
}
}
pipeClient.WaitForExit();
pipeClient.Close();
编辑:修正了错字