Jak mogę uruchomić exe w trybie 32-bitowym na komputerze 64-bitowym?

18

Mam plik wykonywalny, który działa dobrze, gdy działa na 32-bitowych oknach, ale psuje się, gdy działa na 64-bitowych oknach.

Czy jest jakiś sposób, aby zmusić go do działania w trybie 32-bitowym na komputerze 64-bitowym?

Nie mam dostępu do kodu źródłowego.

Rory
źródło
To nie ma większego sensu. Chyba że oprogramowanie ma jakiś kod, który wyraźnie powoduje, że nie działa, jeśli nie działa na komputerze 64-bitowym. Wersja 32-bitowa działa dobrze w wersji 64-bitowej, problem występuje odwrotnie (wersja 64-bitowa w wersji 32-bitowej). Czy pojawia się komunikat o błędzie?
Dave
3
Czy to kod, który napisałeś (w którym to przypadku przepełnienie stosu jest miejscem, w którym należy zapytać - z kodem i komunikatami o błędach), czy jest to program, który uruchamiasz innej osoby? Pomogłoby to, jeśli dołączysz otrzymywane komunikaty o błędach.
ChrisF

Odpowiedzi:

16

Jaką odpowiedź techniczną chcesz? Prawdopodobnie możesz zmusić exe, aby zawsze uruchamiał 32-bitowy za pomocą kilku narzędzi SDK, ale wymaga to trochę pracy.

Prostą odpowiedzią jest uruchomienie z procesu 32-bitowego (np. Użycie %SystemRoot%\SYSWOW64\cmd.exedo uruchomienia).

Bardziej skomplikowane jest sprawdzenie, jaki to jest exe, a następnie samodzielne zmodyfikowanie go. Tłem tutaj jest zrozumienie, że skompilowany kod z języków, które bezpośrednio współpracują z interfejsami API systemu Windows są tworzone przez programistę w wersji 32-bitowej lub 64-bitowej. Nie można tego zmienić bez powrotu do kodu źródłowego.

Jednak coraz częściej aplikacje są pisane za pośrednictwem warstwy wirtualizacji, która ułatwia pisanie aplikacji. Istnieją dwa popularne: .NET i Java. Nie jestem pewien co do Javy, oprócz tego, że wymuszenie prawidłowej instalacji środowiska wykonawczego Java rozwiązuje problem.

W przypadku platformy .NET można użyć narzędzi SDK do:

  • Potwierdzić, że aplikacja jest „AnyCPU”: corflags myExe.exe. Użycie narzędzia z .NET SDK do odczytu nagłówków zestawu .NET, dla exe zwróci coś takiego:
Wersja: v4.0.30319
Nagłówek CLR: 2.5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
Podpisano: 0

32BITREQmówi mi, że to AnyCPUdlatego, że 32-bitowe nie jest wymagane.

  • Użyj corflagsz tą /32BITREQ+opcją, aby zmodyfikować exe tak, aby był tylko 32-bitowy.
Richard
źródło
+1 Ustawienie .Net AnyCPU było moją pierwszą myślą. Wystarczy nieświadomy programista, który nie określił poprawnie tego ustawienia. Wspaniale jest słyszeć, że istnieje sposób, aby to naprawić po skompilowaniu.
Hand-E-Food
2
Próbowałem uruchomić go z %SystemRoot%\SYSWOW64\cmd.exei nie powiodło się w ten sam sposób - wyświetla komunikat o błędzie - a kiedy sprawdzam w TaskManager mój proces exe nie wyświetla się jako proces 32-bitowy
Rory
1
Jak Dave zapytał powyżej, jaki dokładnie komunikat o błędzie pojawia się?
Karan
5
Uruchomienie zarządzanego AnyCPU EXE z SYSWOW64\cmd.exenadal powoduje, że jest on uruchamiany jako proces 64-bitowy (właśnie go wypróbowałem).
Carl Walsh,
3

Jeśli masz system Windows 7 Professional (lub nowszy), skorzystaj z trybu wirtualnego XP firmy Microsoft

emuluje to (?) środowisko 32-bitowe i okazało się przydatne do uruchomienia niektórych starych programów 16-bitowych

SeanC
źródło
0

Próbowałem wszystkiego i nic nie działało. ale potem pomyślałem o przeniesieniu katalogu gta iv z plików programu C / (x86) do plików programu C / i to działa, ponieważ x86 jest dla aplikacji 32-bitowych (tak myślę), ale i tak działał.

mdb
źródło
0

Jest właściwie łatwiejszy sposób na dostosowanie się do tego (nie jest to rozwiązanie długoterminowe).

Upuść aplikację „corflags.exe” w folderze \ windows \ system32. Otwórz wiersz polecenia jako administrator i wpisz ...

corflags „ścieżka i nazwa exe” / 32BITPREF32 +

Zmusi to aplikację do działania jako proces 32-bitowy zamiast 64-bitowy.

Chris Kirkman
źródło