2011-01-07 96 views
0

我有一個特別的問題,我有一些計劃,我不能修改,但它提供了一些功能,我想辦公室內使用。所以我正在爲Office編寫一個插件,它接受我的文檔,在後臺執行程序,將文檔放在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 2011-01-09 10:33:48

1

文件描述符不是Windows的一部分 - 它們是C運行時庫的一部分。你將不得不用C或C++編寫一個DLL來完成你的文件I/O,然後從你的C#程序中調用它。從C DLL獲取文件描述符編號以傳遞給其他代碼。