2011-01-07 97 views
0

我有一个特别的问题,我有一些计划,我不能修改,但它提供了一些功能,我想办公室内使用。所以我正在为Office编写一个插件,它接受我的文档,在后台执行程序,将文档放在stdin上。该程序写入标准输出,我把它回到我的程序后处理。如何打开/使用文件描述符

这一切都只是程序要求,我不希望把标准输入密码工作正常。该工具有一种方法可以从任何其他输入流读取密码,但它需要它应该读取的文件描述符的编号。

因此,这里是我的问题:我如何(在.NET环境中)与一个数字,我可以给作为参数传递给这个节目一个文件描述符打开一个流?理想情况下,我想写类似:

process.start("start-program --password-fd " + x); 
stream = new StreamWriter(x); 
stream.write("secritpwd"); 

等..(但随后奇迹般地纠正,以便将工作;))

我希望有人能帮助我。

谢谢

回答

1

我不知道到底是什么这个应用程式将意味着“文件描述符“,但您可能能够传递可继承的匿名管道的句柄。见AnonymousPipeServerStream。 (这是假设你在至少.NET 3.5。)

基本轮廓是这样的:

  • 实例化一个AnonymousPipeServerStream。
  • 传递管手柄(pipeServer.GetClientHandleAsString())作为命令行参数到C的可执行文件。
  • 写入AnonymousPipeServerStream。
+0

谢谢你做到了。我不想让你真的做到这一点,你需要告诉管道的构造函数它可以被其他进程继承。 – Bram 2011-01-09 10:33:48

1

文件描述符不是Windows的一部分 - 它们是C运行时库的一部分。你将不得不用C或C++编写一个DLL来完成你的文件I/O,然后从你的C#程序中调用它。从C DLL获取文件描述符编号以传递给其他代码。