запуск 16-битного кода на 64-битной ОС с использованием виртуализации

1171
Nathanael

У меня есть программа под названием Parsonstech Hebrew Tutor, разработанная для Windows 98. Очевидно, она была скомпилирована как 16-битная программа, хотя она не DOS и имеет графический интерфейс (16-битная программа Windows). Я смог заставить его работать на 32-битной Windows XP, работающей на виртуальной машине VMWare, но это слишком много для того, что в противном случае является очень простой и даже переносимой программой (это одна из тех старых программ). который запускается с CD без установки). Я действительно не хочу загружать целую ОС для запуска этой программы.

Тем не менее, я провел некоторое исследование для DOS-бокса и прочитал учебник по установке Windows 3.1 на DOS-боксе, но я все равно считаю, что это полная эмуляция системы, и я не знаю, будет ли программа работать на Windows 3.1, так как он предназначен для Windows 98.

Самая многообещающая вещь, которую я видел, это эмуляция пользовательского режима qemu, которая утверждает, что она может эмулировать только процессор и вызывать программу (даже 16-битные программы) без запуска всей сложной виртуальной среды. Если я не понимаю это. Я попытался вызвать программу следующим образом:

qemu-system-x86_64 HT.exe 

из командной строки, но он просто запускается, сбрасывается и не открывает программу. Я думаю, что я использую это неправильно. Может кто-нибудь помочь? Или какие у меня варианты? В идеале я хотел бы создать всю программу и любую виртуализацию, необходимую для запуска переносимого исполняемого файла, без установки проигрывателя VMWare на каждый компьютер, на котором я ее использую. У меня нет исходного кода для его перекомпиляции, и компания, которая его создала, больше не существует, но я не хочу, чтобы она умерла!

0
Согласно [документам QEMU] (http://qemu.weilnetz.de/qemu-doc.html#QEMU-User-space-emulator), эмуляция пользовательского режима поддерживается только в Linux и BSD. Я думаю, что вам придется загружать виртуальную машину. Вы всегда можете попробовать загрузить Windows 95 или 98 в виртуальную машину, если она будет легче, чем XP (не знаю, будет ли она). heavyd 9 лет назад 0
Там действительно нет никакого способа обойти это. Вы не сможете выполнять 16-битные программы в 64-битной Windows без виртуальной машины. Josh 9 лет назад 0
Хм, я знаю, что мне придется использовать какую-то аппаратную виртуализацию, но вопрос в том, нужно ли мне эмулировать полную систему. Windows 95 должна быть значительно меньше, чем XP, и я сейчас читаю, что она может даже работать на 3.1, так что это вариант резервного копирования. Если бы я в итоге запустил его на виртуальной машине Windows 3.1, вы бы порекомендовали использовать DOS box или другой эмулятор? DOS box быстрее? Кроме того, правильно ли я понимаю синтаксис командной строки qemu, чтобы эта команда теоретически могла запустить программу в пользовательском режиме в linux: "qemu-system-x86_64 -cpu kvm32 HT.exe"? Спасибо! Nathanael 9 лет назад 0
Вы должны выбросить это и найти новую программу. Эти программы даже не поддерживают Unicode и могут вызвать проблемы позже phuclv 6 лет назад 0

1 ответ на вопрос

0
td512

Если приложение 16-битное, теоретически вы можете избежать запуска программы внутри DOSBOX. вам нужно это: DOSBOX

После установки вы можете запустить, mount C:\foo Z:которая смонтирует папку приложений в DOSBOX. тогда все, что вам нужно сделать, это: Z:и тогда appname.exe. Просто не забудьте заменить C:\fooреальную папку и appnameреальным именем exe.

Спасибо. Тем не менее, он имеет графический интерфейс, поэтому я думаю, что мне может понадобиться установить Windows 3.x на DOSbox. Но я попробую оба варианта, на всякий случай. Я читал, что Windows 3.x имеет довольно низкую нагрузку на обработку в DOSbox. Nathanael 9 лет назад 0
DOSBOX должен иметь возможность запускать приложение с графическим интерфейсом, как и для DOS-игр. td512 9 лет назад 0
Я только что попробовал, и DOXbox говорит, что "эта программа нуждается в окнах". Я буду экспериментировать с Windows 3.x позже сегодня. Спасибо! Nathanael 9 лет назад 0