可能重複:
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框架(舊我知道但必要)。
我認爲基本的代碼很好。如果我將pathToNewProc更改爲類似@「c:\ windows \ notepad.exe」的路徑,則認爲按預期工作;一個notepad.exe進程啓動。這導致我相信我的newProc.exe的設置有問題。但我不知道問題是什麼。 – greenhat