2012-06-06 7 views
5

Mam następujący kod, który nie będzie działać na x64 systemu operacyjnego od notepad.exe jest x64 i x86 aplikacja nie może uzyskać informacji modułów procesu x64.Dlaczego moja aplikacja, którą skompilowałem z Dowolnym procesorem, działa jako proces 32-bitowy na moim 64-bitowym komputerze?

prc.Modules[0].FileName 

Net zgłasza wyjątek w kodzie

System.ComponentModel.Win32Exception (0x80004005): a 32-bitowe nie procesy ACC modułów ESS procesu 64 bitów.

Zgodnie z wieloma odpowiedziami i artykułami na tym forum, MSDN, ..., Wiem, że potrzebuję używać AnyCPU zamiast tego ze względu na to, że używanie x64 nie ma dla mnie szczególnej korzyści. (NIEPRAWIDŁOWO: testowałem kod sprawdzając wydajność i kod x64 działał ~ 40 ms szybciej, nieważne, że nie chcę, aby mój kod działał o 40 ms szybciej: D) zamiast tego nie będę miał takich problemów. ale nawet gdy kompiluje się na AnyCPU Configuration. mój błąd nie ustępuje, a ponadto w Menedżera zadań widzę (32-bit) pod koniec mojego imienia procesowego.

Nie wiem, że to źle. VS 2011 Beta (64) Windows 8 Consumer Preview (x64)

poważaniem Peyman Mortazawi

+0

Jakie jest twoje pytanie? – Botonomous

+1

Podczas gdy OP zajmuje trochę czasu, aby przejść do jego punktu, pytanie jest poprawne i wydaje się być "Dlaczego moja aplikacja, którą skompilowałem z Dowolnym procesorem, działa jako proces 32-bitowy na moim 64-bitowym komputerze, a zatem nie można korzystać z Notatnika, który działa jako proces 64-bitowy. " –

+1

Czy jesteś SURE kompilowany z Dowolnym CPU, gdy masz wyjątek? –

Odpowiedz

2

Idź do właściwości projektu. Po lewej stronie wybierz opcję Buduj.

Zobacz ustawienie "Cel platformy:" dla bieżącej aktywnej platformy. Zmień na x64.

(podejrzewam swój „Platforma docelowa:” będzie wyraźnie x86 dla „Any CPU”)

enter image description here

+0

Sprawdź również menedżera konfiguracji projektu. Czasami pokazuje, który projekt został nieprawidłowo skonfigurowany. – CodingBarfield

+0

Sprawdziłem to. Wszystkie są poprawne. Myślę, że problemem jest Visual Studio 2011. ponieważ pamiętam, że nie miałem problemu z tym kodem w przeszłości. – Peyman

+0

Dlaczego warto przejść na x64? aby upewnić się, że przyczyną problemu jest konfiguracja kompilacji? Zmieniłem to na x64 i działało bez rzucania tego wyjątku. więc problemem jest właśnie konfiguracja kompilatora. – Peyman

1

Choć pytający zaakceptował odpowiedź, czuję się jak odpowiedź jest niepełna, ponieważ pytającego wspomniał, że używa programu Visual Studio 2011, a zatem przy założeniu, że docelowy .Net Framework będzie wynosił 4,5, jest kilka zastrzeżeń dotyczących tego, co oznacza "AnyCPU".

Proszę zapoznać się z tymi odsyłaczami, aby lepiej zrozumieć, jak znaczenie "AnyCPU" zmieniło się z czasem.

  1. http://blogs.microsoft.co.il/sasha/2012/04/04/what-anycpu-really-means-as-of-net-45-and-visual-studio-11/
  2. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/platform-compiler-option

Z tych linków, można dojść do odpowiedzi na pytanie, dlaczego aplikacja działa jako proces 32 bitowym

Na 64- bitowy system operacyjny Windows:

Pliki wykonywalne kompilowane z/platformą: anycpu32 bitpreferred wykonać na 322-bitowym CLR.

Oto twój winowajca.

enter image description here

Powiązane problemy