質問

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

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

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

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

など。(ただし、魔法のように修正されて機能するようになります ;))

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

ありがとう

役に立ちましたか?

解決

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

基本的なアウトラインは次のようなものです。

  • 匿名PipeServerStreamをインスタンス化します。
  • パイプハンドルを渡す(pipeServer.GetClientHandleAsString())c実行可能ファイルへのコマンドラインパラメーターとして。
  • AnonymousPipeServerStreamに書き込みます。

他のヒント

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

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

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

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

OpenFileById 関数

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top