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.


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.

+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


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ł.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.