0

特定の問題があります。変更できないプログラムがありますが、オフィス内で使用したい機能を提供しています。そのため、ドキュメントを受け取り、プログラムをバックグラウンドで実行し、ドキュメントを stdin に配置する Office 用のプラグインを作成しています。プログラムは stdout に書き込み、それをプログラムに戻して後処理します。

プログラムが標準入力に入れたくないパスワードを要求することを除いて、これはすべて正常に機能します。このツールには、他の入力ストリームからパスワードを読み取る方法がありますが、読み取るファイル記述子の番号が必要です。

ここに私の質問があります: (.net 環境内で) このプログラムにパラメーターとして与えることができる番号を持つファイル記述子でストリームを開くにはどうすればよいですか? 理想的には、次のようなものを書きたいです。

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

ect ..(ただし、魔法のように修正されるため、機能します;))

誰かが私を助けてくれることを願っています。

ありがとう

4

3 に答える 3

2

このアプリの「ファイル記述子」が何を意味するのか正確にはわかりませんが、継承可能な匿名パイプのハンドルを渡すことができる場合があります。AnonymousPipeServerStreamを参照してください。(これは、少なくとも .NET 3.5 を使用していることを前提としています。)

基本的なアウトラインは次のようになります。

  • AnonymousPipeServerStream をインスタンス化します。
  • パイプ ハンドル ( pipeServer.GetClientHandleAsString()) をコマンドライン パラメータとして C 実行可能ファイルに渡します。
  • AnonymousPipeServerStream に書き込みます。
于 2011-01-07T15:46:31.147 に答える
1

ファイル記述子は Windows の一部ではなく、C ランタイム ライブラリの一部です。ファイル I/O を実行するには、C または C++ で DLL を作成し、C# プログラムから呼び出す必要があります。C DLL からファイル記述子番号を取得して、他のコードに渡します。

于 2011-01-07T15:32:24.770 に答える
0

おそらく、このリンクは、開始してロジックを取得するのに役立ちます。

OpenFileById を使用してファイルを開く方法

C# でファイル記述子へのパイプ接続を開く

OpenFileById 関数

于 2011-01-07T15:44:48.210 に答える