2011-01-07 4 views
0

У меня есть особая проблема, у меня есть программа, которую я не могу изменить, но которая предоставляет некоторые функции, которые я хотел бы использовать внутри офиса. Поэтому я пишу плагин для Office, который берет мой документ, выполняет программу на заднем плане, помещает документ в stdin. Программа записывает на stdout, и я возвращаю это обратно в свою программу, чтобы опубликовать этот процесс.Как открыть/использовать дескриптор файла

Все это работает отлично, за исключением того, что программа запрашивает пароль, который я не хочу ставить на 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

1

Файловые дескрипторы не являются частью Windows - они являются частью библиотеки C времени выполнения. Вам нужно будет написать DLL на C или C++ для ввода/вывода файлов, а затем вызвать его из вашей программы на C#. Получите номер дескриптора файла из библиотеки DLL, чтобы перейти к другому коду.

0

Maby это ссылки помогут вам начать и получить логику от:

How to use OpenFileById to open a file

Opening pipe connection to a file descriptor in C#

OpenFileById Function

+0

Похоже, что поддерживается только в Vista, Server 2008 или новее. Кроме того, являются ли эти идентификаторы файлов такими же, как дескрипторы файла времени выполнения C? –

Смежные вопросы