0

我有一个特殊的问题,我有一些我无法修改的程序,但它提供了一些我想在办公室内使用的功能。所以我正在为 Office 编写一个插件,它获取我的文档,在后台执行程序,将文档放在标准输入上。该程序写入标准输出,然后我将其带回我的程序以进行处理。

这一切都很好,只是程序要求输入我不想放在标准输入上的密码。该工具有一种从任何其他输入流中读取密码的方法,但它需要它应该从中读取的文件描述符的编号。

所以这是我的问题:我如何(在 .net 环境中)打开文件描述符上的流,其中包含我可以作为参数提供给该程序的数字?理想情况下,我想写如下内容:

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

等..(但随后神奇地纠正了它会起作用;))

我希望有一个人可以帮助我。

谢谢

4

3 回答 3

2

我不确定这个应用程序的“文件描述符”到底是什么意思,但你也许可以传递一个可继承的匿名管道的句柄。请参阅AnonymousPipeServerStream。(这假设您至少使用 .NET 3.5。)

基本大纲是这样的:

  • Instantiate an AnonymousPipeServerStream.
  • Pass the pipe handle (pipeServer.GetClientHandleAsString()) as a command-line parameter to your C executable.
  • Write to the AnonymousPipeServerStream.
于 2011-01-07T15:46:31.147 回答
1

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

于 2011-01-07T15:32:24.770 回答
0

Maby 这个链接将帮助您开始并从以下位置获取逻辑:

如何使用 OpenFileById 打开文件

在 C# 中打开到文件描述符的管道连接

OpenFileById 函数

于 2011-01-07T15:44:48.210 回答