Ricevo che “I processi a 32 bit non possono accedere ai moduli di un processo a 64 bit”. eccezione invocando Process.Start ()

Ecco il codice di esempio

var startInfo = new ProcessStartInfo { Arguments = commandStr, FileName = @"C:\Windows\SysWOW64\logman.exe", }; using (var createCounterProc = new Process { StartInfo = startInfo }) { createCounterProc.Start(); createCounterProc.WaitForExit(); } 

Dopo aver eseguito il codice ottengo “Un processo a 32 bit non può accedere ai moduli di un processo a 64 bit”. messaggio in MainModule (NativeErrorCode: 299). La mia soluzione è configurata su AnyCPU. Ho provato entrambe le versioni a 64 e 32 bit di logman.exe (C: \ Windows \ SysWOW64 \ logman.exe e C: \ Windows \ System32 \ logman.exe) ma ho ancora lo stesso errore. Il mio sistema operativo è Win8.1Prox64. Cosa potrebbe causare il problema?

Traccia dello stack:

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

Ecco la configurazione di Build: inserisci qui la descrizione dell’immagine

    Scegliere una CPU qualsiasi per il target della piattaforma non è sufficiente, è necessario deselezionare Prefer 32-bit , altrimenti l’applicazione verrà comunque eseguita come un’applicazione a 32 bit.

    Questo è ansible solo su progetti applicativi, non su progetti di biblioteca. Se il tuo progetto è una biblioteca, devi farlo nel progetto usando la tua biblioteca.

    Dopo le indagini mi sono reso conto che Logman.exe è un codice non gestito, quindi non può restituire un object .NET come MainModule, quindi è un comportamento normale. Mi sto solo confondendo un messaggio di errore per Win32Exception. Non influenza l’esecuzione di Process.Start ().