2013-07-03 36 views
2

我執行這樣的處理:共用值處理

Process process = new Process(); 
process.StartInfo = new ProcessStartInfo(localpath); 
process.Exited += new EventHandler(process_Exited); 
process.EnableRaisingEvents = true; 
process.Start(); 

其中是局部路徑的路徑.docx文件。我也有一個Word Add-In,我在功能區中有一個Import按鈕。一旦按下它應該設置一些值,讓我們說「你好」,一旦退出,process_Exited()方法應能:

MessageBox.Show(the mysterious accessor for that "hi"); 

不過,我不知道這是不可能的,因爲我已經找到許多人告訴我如果在另一個過程中無法訪問父表單。所以我放棄了這個想法,我想要做的就是將這個「嗨」發送給父表單(這是在不同的應用程序中),這將成爲接下來做什麼的足夠指標。

我試過使用這個項目,但我的消息箱出現在同一個窗口中,而不是父項,因爲這些是兩個單獨的應用程序(WORD和我的應用程序)。我也嘗試過發送環境值,但我只能在孩子身上(而不是設置!)。

那麼,有沒有辦法讓一些值從孩子傳遞給父母的過程?

回答

4

有許多方法可以將信息從孩子傳遞給父母。

如果您的子進程是控制檯應用程序,您可以讓孩子在控制檯上寫入值(即Console.WriteLine)。父進程可以重定向孩子的輸出並讀取它。一個例子見Capturing console output from a .NET application (C#)

如果你有一小組可能的值要返回(即「嗨」,「再見」,「幫助」等),那麼你可以枚舉它們並讓孩子返回一個0到N,其中N是可能值的數量。有關獲取流程退出代碼的示例,請參見Get return value from process。要設置子進程退出代碼,請設置Environment.ExitCode,或從Main返回值。

如果您不能使用控制檯並且想要返回文本數據,則可以使用Named Pipes進行進程間通信。父程序創建管道並調用孩子。孩子打開管道並在退出之前將數據庫發送給父級。

還有其他的可能性,但我懷疑其中一個會做你想做的。

+0

是的,我的子進程是MS WORD的應用程序,所以命名管道是。謝謝! –

+0

@jimmischel,您的解決方案無法在程序中運行。它僅用於程序以參數開始。 – vanloc

+0

@VănLộc:我在這個答案中提到了許多可能的「解決方案」。哪一個不適合你? –