2010-08-18 26 views
2

我正在致力於Compact Framework 2.0項目,並且正在嘗試使用Process在另一個程序「A」中啓動程序「B」。開始。我以前做過幾次,但這次我遇到了一些奇怪的問題。使用System.Diagnostics.Process.Start運行程序會導致MissingMethodException

程序「B」確實啓動,但它會導致MissingMethodException,基本上告訴我它缺少它引用的某個程序集。問題是程序集.dll就在那裏,與程序「B」在同一個文件夾中。如果我雙擊程序「B」,它將正確運行且沒有MissingMethodException,只有在程序「A」中的Process.Start啓動時纔會發生此問題。我完全不知道這裏發生了什麼。我試圖設置WorkingDirectory屬性沒有運氣。有關爲什麼程序在通過Process.Start執行時無法加載其引用的任何想法?由於

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      ProcessStartInfo startInfo = new ProcessStartInfo(programBFullPath, "argument"); 

      //I've been changing these two properties, have tried shell execute with both false and true, tried setting working directory and not setting it also 
      startInfo.UseShellExecute = false; 
      startInfo.WorkingDirectory = programBDirectory; 

      proc.StartInfo = startInfo; 
      proc.Start(); 

編輯我只是想的東西......這兩個程序「A」和節目「B」使用的.dll程序「B」沒有加載。如果兩個程序無法同時加載相同的.dll,那就是問題所在。是這樣嗎?

+0

如果直接啓動B程序會發生什麼?我的意思是雙擊它.. 編輯:對不起,我錯過了問題中的一些行:D – munissor 2010-08-18 15:28:34

回答

1

好吧,我通過複製程序B的程序集上的引用代碼並刪除所有引用來實現它。它遠非優雅,但我無法以其他方式運作。如果任何人有任何可能出錯的想法,我將不勝感激。它可能在其他時間派上用場。謝謝

1

設備上的內存壓力如何?如果程序B依賴於程序集C,但沒有足夠的內存(虛擬或物理)來加載程序集C,那麼你將得到一個MissingMethodException(而不是OutOfMemoryException,我一直認爲這會更有意義)。

+0

內存似乎夠了,我現在想這可能是我添加到我原來的答案的問題。難道是我無法加載相同的.dll兩次? – JayPea 2010-08-18 15:43:38

+0

他們沒有理由不能使用相同的組件。他們將分別加載自己的副本(除非是GAC)。它們必須被編譯爲使用相同版本的DLL(或者有一個應用程序配置條目,告訴它們可以加載存在的)。 – ctacke 2010-08-18 15:59:30

+0

它們應該被編譯爲運行相同的版本,因爲它們在相同的解決方案上,並且參考被添加到同一解決方案中的項目。我怎麼能告訴程序加載任何版本?謝謝 – JayPea 2010-08-18 16:09:51

相關問題