2012-11-28 28 views
2

可能重複:
C# Only part of a ReadProcessMemory or WriteProcessMemory request was completed during Process.Kill()「只有readprocessmemory或WriteProcessMemory的請求的一部分已完成」的Process.Start期間

我想從我目前啓動新進程處理。我使用processInfo和process.start來執行此操作。新的進程應該運行我以前建立的exe,稱它爲newProc.exe,它可以從cmd行很好地運行。

代碼調用EXE

class Program 
    { 
     static void Main(string[] args) 
     { 
      StartNewProc(); 
     } 

     public static void StartNewProc() 
     { 
      string pathToNewProc = @"c:\path\to\newproc.exe"; 

      ProcessStartInfo processInfo = new ProcessStartInfo(); 
      processInfo.FileName = pathToNewProc; 
      processInfo.Arguments = "Some cmd line argument"; 
      processInfo.CreateNoWindow = false; 
      processInfo.WindowStyle = ProcessWindowStyle.Hidden; 

      Process proc = Process.Start(processInfo); 
      proc.WaitForExit(); 
     } 
    } 

當我運行這一點,無論是在Visual Studio調試器或CMD線,該newProc.exe沒有得到啓動。在調試器中查看它,如果我在Process.Start之後查看'proc',則可以看到MainModule成員中引發的異常。異常消息是「只有ReadProcessMemory或WriteProcessMemory請求的一部分已完成」。

System.Diagnostics.NtProcessManager.GetModuleInfos(的Int32的ProcessID, 布爾firstModuleOnly)在 System.Diagnostics.Process.get_MainModule()

一些研究展望深入到這個異常的堆棧跟蹤到那個例外指向32位對64位問題。這兩個exes,newProc exe和我提出的代碼的調用exe都是64位應用程序。我通過應用程序屬性並通過任務管理器(查找「* 32」標籤)進行檢查。我已經嘗試在Visual Studio中將平臺設置爲x64和任何CPU,但沒有運氣。

有關爲什麼Process.Start在這些條件下無法讀取的任何想法?

注意:這是在Win7 64bit。這兩個exes都是C#應用程序。兩者都使用2.0框架(舊我知道但必要)。

+0

我認爲基本的代碼很好。如果我將pathToNewProc更改爲類似@「c:\ windows \ notepad.exe」的路徑,則認爲按預期工作;一個notepad.exe進程啓動。這導致我相信我的newProc.exe的設置有問題。但我不知道問題是什麼。 – greenhat

回答

1

我想通了。這個問題完全在我的newProc應用程序中。由於有一個參數,它正在提前退出。返回的例外只是誤導,帶我進行了一場瘋狂的追逐。

相關問題