Как открыть / использовать дескриптор файла - PullRequest
0 голосов
/ 07 января 2011

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

Все это прекрасно работает, за исключением того, что программа запрашивает пароль, который я не хочу ставить на стандартный ввод.У инструмента есть способ прочитать пароль из любого другого входного потока, но ему нужен номер дескриптора файла, из которого он должен прочитать.

Итак, вот мой вопрос: как мне (в среде .net) открыть поток в файловом дескрипторе с номером, который я могу дать в качестве параметра этой программе?В идеале я хочу написать что-то вроде:

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

и т. Д. (Но затем волшебным образом исправлю, чтобы это сработало;))

Я надеюсь, что кто-то может мне помочь.

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 января 2011

Я не уверен, что именно это приложение подразумевает под "дескриптором файла", но вы можете передать дескриптор наследуемого анонимного канала См. AnonymousPipeServerStream . (Предполагается, что вы используете как минимум .NET 3.5.)

Основная схема будет выглядеть примерно так:

  • Создание объекта AnonymousPipeServerStream.
  • Передайте дескриптор канала (pipeServer.GetClientHandleAsString()) в качестве параметра командной строки вашему исполняемому файлу C.
  • Запись в AnonymousPipeServerStream.
1 голос
/ 07 января 2011

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

0 голосов
/ 07 января 2011
...