2

重複の可能性:
C# Process.Kill() 中に ReadProcessMemory または WriteProcessMemory 要求の一部のみが完了した

現在のプロセスから新しいプロセスを開始しようとしています。私はこれを行うために processInfo と process.start を使用しています。新しいプロセスは、以前に作成した exe を実行することになっています。これを newProc.exe と呼びます。コマンド ラインから正常に実行されます。

呼び出し元の 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 デバッガーまたはコマンド ラインからこれを実行すると、newProc.exe が起動しません。デバッガーで見ると、Process.Start の後の 'proc' を見ると、MainModule メンバーで例外がスローされていることがわかります。例外メッセージは、「ReadProcessMemory または WriteProcessMemory 要求の一部のみが完了しました」です。

その例外のstackTraceを詳しく調べる

System.Diagnostics.Process.get_MainModule() の System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)

その例外に関するいくつかの調査では、32 ビットと 64 ビットの問題が指摘されています。newProc exe と呼び出し元の exe の両方の exe は、私が提示したコードで、64 ビット アプリです。アプリケーションのプロパティとタスクマネージャーを介して確認しました(「* 32」タグを探しています)。Visual Studio でプラットフォームを x64 と任意の CPU の両方に設定しようとしましたが、うまくいきませんでした。

Process.Start がこれらの条件で読み取れない理由についてのアイデアはありますか?

注: これは Win7 64bit です。どちらの exe も C# アプリケーションです。どちらも 2.0 フレームワークを使用しています (古いことはわかっていますが、必要です)。

4

1 に答える 1

1

私はそれを考え出した。問題は完全に私の newProc アプリケーションにありました。args.Len チェックのため、早期に終了していました。返された例外は誤解を招くだけで、私はちょっとした野生のガチョウの追跡に連れて行かれました。

于 2012-11-28T20:49:40.390 に答える