2013-12-18 7 views
0

У меня проблема с Rad Studio XE3: моя программа (32 бит) регулярно идет на моем компьютере (Windows 7-64 бит), но когда я пытаюсь запустить исполняемый файл на «xp mode "появляется следующее сообщение об ошибке:« не удается найти точку входа для Wow64RevertWow64FsRedirection в библиотеке KERNEL32.dll ».Запуск 32-разрядной программы на windows xp

Я должен запустить его на компьютере, 32 бит, установить xp.

Заранее спасибо.

+0

Это худшее закрытие, которое я видел пока. * Вопросы об общем вычислительном оборудовании и программном обеспечении не относятся к теме для переполнения стека. * Да, действительно. Но вопросы о том, почему призывы к функциям API Win32 не могут быть решены, очень много по теме. Закрыть избирателей, позор вам! –

ответ

2

Функция Wow64RevertWow64FsRedirection доступна только на системах Win64.

Минимальная поддерживаемая клиент Windows Vista, Windows XP Professional x64 Edition [настольные приложения только]

Это не то, что используется в любом месте в Delphi RTL или VCL, так это то, что ваш код (или сторонний компонент или библиотека, которые вы используете).

Вам необходимо удалить его (и любые другие 64-битные функции), чтобы ваше приложение совместимо с 32-разрядными версиями Windows.

+0

Хорошо спасибо за ответ. – user2377071

3

Перенаправление файловой системы WOW64 имеет смысл только при работе под WOW64. Таким образом, эта функция работает только с 32-разрядным процессом, работающим на 64-битной системе, то есть под WOW64. Функция, если она доступна для 64-битного процесса, но всегда терпит неудачу (возвращает FALSE). И эта функция недоступна в 32-битной системе.

Таким образом, вы не должны использовать привязку времени загрузки для функции, если вы хотите, чтобы ваша программа выполнялась на 32-битной ОС. И вы должны ожидать, что он потерпит неудачу, если вы вызовете его из 64-битного процесса.

Если вы собираетесь отключить перенаправление файловой системы, то вам необходимо:

  1. Использование во время выполнения связывания. То есть с звонками до GetModuleHandle('kernel32') и GetProcAddress().
  2. Добавить код, чтобы обработать тот факт, что GetProcAddress() может вернуться NULL. В этом сценарии вы просто пропускаете вызовы, которые запрещают перенаправление файловой системы.
  3. Пропустить вызовы, чтобы отключить перенаправление файловой системы, если ваш процесс 64 бит, потому что они всегда терпят неудачу.

Сейчас очень мало сценариев, в которых отключение перенаправления файловой системы целесообразно. Как правило, по моему опыту, если разработчик достаточно сообразителен, чтобы признать такой сценарий, то они также достаточно сообразительны, чтобы разобраться с тремя пунктами, перечисленными выше. Поэтому мне кажется правдоподобным, что ваш код не должен вообще отключать перенаправление файловой системы. Интересно, есть ли лучшее решение любой проблемы, которая заставила вас отключить перенаправление файловой системы.

+0

Иногда люди проводят много времени, чтобы залезть через стены, вместо того чтобы использовать дверь всего в нескольких шагах –

Смежные вопросы