12 октября 2011 г.

Установка Delphi 1 на Windows 7 x64

Предупреждение: это несерьёзный пост с нулевой практической пользой. For fun only...

У меня сломалась VMWare, поэтому получилось немножко поиграться...

В общем-то на Windows 7 VMWare всегда работала у меня со скрипом. Я использую бесплатный VMWare Player. Практически сразу же у него отвалился VMWare Auth Service и никакие пляски с бубном и никакие KB делу не помогли. Приходилось пускать плеер с администраторскими полномочиями. Это работало...

Пока однажды (три дня назад) не вышел новый VMWare Player. Мой товарищ попробовал до него обновится и... не удалось. 3.1 установщик-то снёс, а вот 4.0 наотрез отказался ставить. Причём без объяснения причин. MSI failed - и всё тут. Поиски по KB, форумам результата не дали. Систему вычищал, но толку от этого не было.

В общем плюнул я на это дело и решил взять другой вариант.

Из вариантов смотрел в сторону Sun-вского VirtualBox (который теперь Oracle-ский) и Microsoft-ского Virtual PC (который теперь входит в Windows 7). VirtualBox привлёк импортом диска от VMWare, а Virtual PC - тем, что родное, Microsoft-ское.

В общем-то мне виртуалка нужна для тестов и сборок, на неё я обычно ставлю Delphi версий с 3 по последнюю. Но раз уж тут пошла такая пьянка с окружением, решил посмотреть, что из этого зоопарка встанет на Windows 7 напрямую. Это могло бы сэкономить мне время для тестов.

Delphi 4 и выше установились без проблем - делалось по известному мануалу.

Что касается Delphi 2 и Delphi 3 - то хотя сами программы 32-битные, но они запакованы в 16-битный установщик. На 64-битных Windows запустить 16-битную программу напрямую невозможно. Поэтому Delphi 2 и Delphi 3 напрямую на Windows 7 x64 установить нельзя (возможно, их можно установить на 32-битную Windows 7, но я это не проверял - у меня стоит только 64-битная версия).

Delphi 1 и вовсе является полностью 16-разрядной, так что она не сможет работать на 64-битной Windows, даже если вам удастся её установить.

Но, как известно, Microsoft очень заботится об обратной совместимости, так что кажется маловероятным, что они вот так забросят 16-разрядные программы.

Верно, всё так. И старые программы (не только 16-разрядные, но и вообще любые) поддерживаются в Windows 7 через виртуальную машину - решение, известное под именем XP mode ("режим Windows XP"). Этот режим предназначен для запуска унаследованных (legacy) приложений. Это не идеальное решение, но во многих случаях достаточное. Режим Windows XP создавался главным образом с целью упрощения перехода предприятий с Windows XP на Windows 7. Поэтому он не подходит для программ с интенсивным потреблением графических ресурсов, таких как 3D-игры, и программ с требованиями к оборудованию, таких как ТВ-тюнеры. Иными словами, это корпоративный инструмент, а не утилита для домашних пользователей. Именно поэтому он доступен только в редакция Professional (Профессиональная), Corporate (Корпоративная) и Ultimate (Максимальная).

У меня редакция Ultimate - так что я в порядке.

Итак, XP mode представляет собой специальную виртуальную машину для Virtual PC. Сам по себе Virtual PC - обычная виртуалка вроде VMWare или VirtualBox. И его можно установить абсолютно бесплатно и создавать и использовать в нём виртуальные машины. В этом он ничем не отличается от других VM. Есть, правда, один момент - обычно виртуальная машина предоставляет поддержку для гостевой операционной системы в виде утилит/драйверов, которые улучшают интеграцию гостевой и хост систем. Без подобной поддержки использовать гостевую ОС зачастую затруднительно. И дело в том, что Virtual PC, как несложно догадаться, имеет поддержку только для Windows. Хотя я могу ошибаться - особо глубоко я не смотрел.

Как я уже сказал, XP mode - это особая виртуальная машина для Virtual PC. Представляет собой образ, который вам надо скачать с интернета - что-то около 400 мегабайт. Установки не требует. Она готова к работе сразу после распаковки. Ключевой момент (и главное преимущество над остальными вариантами) - наличие лицензионной Windows XP в комплекте: в образ прошит лицензионный OEM ключ Windows XP Pro SP 3. Иными словами, у вас появляется бесплатная лицензия на Windows XP. Это невозможно с другими виртуальными машинами. С ними у вас есть три варианта: пиратка, триал и покупка лицензии для виртуалки. Впрочем, давайте по порядку.

Первое, что нужно сделать - скачать вот здесь "Windows Virtual PC" и "Режим Windows XP" - ссылки на закачку появятся после того, как вы выберите версию своей ОС. Это бесплатно, но требуется проверка подлинности ОС. Суммарно загрузка займёт менее 500 Мб. Там есть ещё ссылка на обновление, но если вы уже установили Service Pack 1 для Windows 7, то оно вам не нужно.

После загрузки запускайте установку - сначала установите Virtual PC, а затем - XP mode. Проблем с установкой быть не должно - обычный установщик. Единственный момент - при установке XP mode установщик попросит вас создать пользователя:


Создание специальной пользовательской учётки

(Примечание: здесь и ниже - многие снимки экрана имеют англоязычные надписи. На самом деле, там всё должно быть по русски. Вообще-то у меня русская система, но просто у меня MUI и язык UI переключен в English - чтобы удобнее было делать скриншоты для буржуев. Мне просто было лень переключать язык обратно в русский, т.к. это требует ре-логина).

Это необходимо для интеграции систем. У гостевой системы в любом случае не будет администраторского доступа, так что можно задать пароль и не особо волнуясь установить галочку "Запомнить пароль".

После установки Virtual PC и XP mode можно найти в меню Пуск.


Установленный Virtual PC и XP mode

Вставьте диск с Delphi 1 (можно - вставить образ в виртуальный дисковод) и запустите XP mode. Вы увидите обычный классический рабочий стол Windows XP. В Моём компьютере вы увидите все диски хост-системы, включая CD/DVD дисководы - откройте диск с Delphi 1 и запустите установщик:


Ностальгия... (все картинки кликабельны)

Установщик, напомню, 16-битный, предназначенный для Windows 3.11, а вовсе не для Windows XP. Это особенно заметно на следующем шаге:


Пути установки по умолчанию

Разумеется, такой кошмар нас не устраивает, поэтому указываем стандартную папку в Program Files. Поскольку программка 16-битная, то длинные имена она не понимает - приходится писать Progra~1 (короткое имя Win16) вместо Program Files (длинное имя Win32):


Другое дело!

Далее всё проходит без эксцессов:


Old-school установщик - до сотни за 15 секунд...

Но, конечно же, есть и особенности:


Share.exe? Серьёзно? :)


Autoexec.bat? Ох, старые деньки...

Конечно же, я везде отметил "Нет" на подобные вопросы. Хорошо ещё он не потребовал у меня вставить дискету...

В любом случае, установка завершается успешно и без проблем:


Готово? Ещё нет...

Вот только Delphi откажется запускаться, мотивируя пропущенными DLL. DLL-ки лежат в дистрибутиве и в папке установленной Delphi - в подпапке Windows\System - как несложно сообразить, эти DLL являются разделяемыми компонентами и должны быть скинуты в системную папку Windows (которая на Windows XP, да и 32-битных Windows вообще, теперь называется System32). Я не рискнул кидать 16-битные компоненты в системную папку, а вместо этого я просто скопировал их в папку Bin установленной Delphi.

Вот теперь всё в порядке:


Delphi 1 запущена внутри виртуальной машины XP mode

Обратите внимание на множественность кнопок в панели задач (слева), олд-скульные вкладки палитры компонентов и старые модули WinTypes и WinProcs вместо Windows. А также то, как Delphi игнорирует панель задач слева при максимизации - устанавливая размер окна в полную ширину экрана. Этим, кстати, грешит не только Delphi 1, но и многие другие старые 32-битные версии Delphi. Ну и, конечно же, вид окон IDE и запущенного приложения: сразу видно, что это 16-разрядное приложение - по отсутствующему эффекту 3D во многих местах у окон и по олд-скульным диалогам.

Аналогично устанавливаются и Delphi 2 с Delphi 3 - за исключением того, что им не нужны шаманские пляски с копированием файлов и ответов на загадочные диалоги в стиле Win16 - потому что установщики этих версий, хотя и являются 16-битными программами, но предназначены для установки только на Windows 95 и выше, так что все умолчания будут вполне сносными. По виду установка мало чем отличается от той же Delphi 7:


Delphi 2 в XP mode (полноэкранный режим)

Напомню, что это мы только установили Delphi в виртуальную машину. Т.е. реально пока это выглядит примерно так:


Delphi 2 в XP mode (оконный режим)

Но XP mode имеет неплохую интерграцию с хост-системой. Вот как это выглядит.

Для начала надо скопировать ярлык программы из папки пользователя в All users:


Копируем ярлыки программ в All users

Ну а теперь виртуальную машину можно просто выключить - она нам не нужна...

После этого ярлыки на установленные в виртуальную машину программы можно увидеть в... меню Пуск хост-системы!


Delphi 2 на хост системе


Delphi 2 на хост системе

Примечание: вообще-то на снимках выше должны показываться все три Delphi, но просто я изначально устанавливал Delphi 2 и снимки экрана делал для неё - мне лень переснимать их. Просто поверьте, что там все три Delphi - включая 16-битную Delphi 1.

Это самые обычные ярлыки - их можно копировать, закреплять (pin) в меню Пуск и панели задач. И, конечно же, запускать!


16-битная Delphi 1 на 64-битной Windows 7

Обратите внимание на интеграцию. Окно выглядит полноценным - оно сочетается с Аэро. Оно таскается, ресайзится и максимизируется как любое другое окно в системе. Вообще, если бы не другой значок в панели задач, то можно и не догадаться, что эта программа запущена через виртуальную машину. Она реально выглядит как родное приложение.

Вот ещё возможности интеграции:


Возможности интеграции XP mode


Отладка


Демки из комплекта поставки: ResXplor


Демки из комплекта поставки: RichEdit


Два близнеца...

Обратите внимание на разницу в размере окон Microsoft Security Essentials. Это потому что на хост системе стоит DPI 120, а на виртуалке - 96.

Но это ещё не всё. Если в Delphi IDE вы выберите сохранить проект или открыть проект - диалог открытия/сохранения предложит вам... папку Мои документы хост-системы! Разумеется, вы можете выбрать и любое другое место в системе (ну, почти любое - у гостевой виртуалки нет администраторского доступа, так что только те места, которые доступны вам для записи - при условии, что UAC не отключали, конечно), но на Мои документы я просто обалдел. Браво!


Открытие проекта напрямую с хост-системы

Если вам интересно, как это реализовано чисто технически, то тут нет никаких чудес: функция SHGetSpecialFolderPath просто возвращает \\tsclient\C\Users\Александр\Documents\ - вот и весь секрет. Delphi использует стандартный диалог открытия, так что она автоматом использует это поведение, но другим кривым программам может не так повезти.

Но это только для Delphi 2 и Delphi 3. В Windows 3.11 не было никаких Моих документов, поэтому диалог Delphi 1 по умолчанию предлагает вам папку Bin Delphi (на снимке экрана я ускакал с неё, чтобы показать ещё один интересный момент):


No fancy cyrillics for old-schoolers!

Длинные имена тоже недоступны, конечно же.

Ещё приятный момент Virtual PC и XP mode: скромность к потреблению ресурсов:


Потребление памяти виртуальной машиной с 512 Мб оперативной памяти


Потребление не меняется при выделении памяти в виртуальной машине
(выделено 512 Мб через AllocMem)

В целом, потребление памяти низкое - в отличие от VMWare, которая всегда выделяет столько памяти, на сколько установлена виртуалка. Сама же Virtual PC работает вполне быстро - я не заметил никаких притормаживаний по сравнению с VMWare, но, с другой стороны, я пока только игрался, серьёзных нагрузок не было.

Ну а когда вы закрываете запущенную программу - закрывается и виртуальная машина. Причём тут надо отметить, что происходит это очень быстро - до 10 секунд на выключение и до 5 секунд на запуск. Это потому, что виртуальная машина не выключается. Вообще. У неё даже в меню Пуск нет пункта выключения (только лог-офф). Крестик в панели управления виртуальной машины (сверху такая полосочка) закрывает виртуальную машину, да. Но машина при этом не выключается, а гибернизируется. Вот откуда такие малые задержки на открытие/закрытие программ. Конечно, машину всё ещё можно выключить программно - равно как и перезагрузить установщиком. Но в целом она не выключается.

Кстати, если вы запустили программу через ярлычок XP mode на хост системе, то вы не сможете открыть XP mode в виде рабочего стола. Попытка сделать это приведёт к такому сообщению:


Запуск XP mode при запущенных legacy-приложениях

В общем, сначала закройте все виртуализированные программы и лишь затем пускайте XP mode. И наоборот: если вы работаете в виртуальной машине с рабочим столом, то запуск любой legacy-программы через ярлык в хост-системе покажет аналогичное предупреждение с предложением сделать log-off из виртуалки. Иными словами, лишь один режим может работать одновременно: либо виртуалка с рабочим столом, либо интеграция в рабочий стол хост-системы, но не одновременно.

Ну и вообще надо сказать, что запуска виртуалки как таковой вы не видите - показывается просто вот такой прогресс-бар:


Запуск XP mode или legacy-приложения

Это всё, что вы видите. Больше ничего нет. Далее - уже рабочий стол виртуальной машины или появляется окно приложения на рабочем столе хост-системы (смотря что вы запускали).

И аналогично при закрытии:


Закрывается XP mode или legacy-приложение

Delphi 2 и Delphi 3 - native на 64-битной Windows 7

Вариант с XP mode очень хорош, но если я захочу тестировать скрипт установщика, то мне нужно наличие D3-DXE2 на одной машине. Поэтому, было бы неплохо установить Delphi 3 на мою Windows 7.

Как я указал выше - это невозможно сделать штатными средствами, потому что установщик у неё 16-битный.

Но поскольку сама среда при этом является 32-битной, то нет никаких препятствий для её работы под Windows 7.

Поэтому я просто взял уже установленные в XP mode Delphi 2 и Delphi 3, скопировал их на хост-машину в папку C:\Program Files (x86)\Borland\Delphi2 и \Delphi3 соответственно (на хост-системе, напомню, стоит 64-битный вариант Windows). Кроме того, я экспортировал в файл разделы реестра HKCU и HKLM \Software\Borland\Delphi\2.0 и \3.0. И также скопировал файлы реестра на хост-машину.

После этого необходимо было изменить в настройках Delphi пути к себе, поскольку путь изменился с (к примеру) C:\Program Files\Borland\Delphi 2.0\Bin\delphi.exe до C:\Program Files (x86)\Borland\Delphi2\Bin\delphi.exe. Так что я сделал две вещи:
  1. Исправил файлы реестра (*.reg):
    1. Запустил замену "Program Files" на "Program Files (x86)"
    2. Запустил замену "\Delphi 2.0" на "Delphi2"
  2. Запустил поиск по "Program Files" в папке Delphi 2 и для каждого файла:
    1. Запустил замену "Program Files" на "Program Files (x86)"
    2. Запустил замену "\Delphi 2.0" на "Delphi2"
После этого я импортировал файлы реестра и... вуаля! Delphi 2 и Delphi 3 запустились без единого писка (и работают):


Delphi 2 в родном режиме на Win7 x86-64

Заметьте, что в отличие от виртуализированной установки в XP mode:
  1. Обрамление окна - стекло, а не классика
  2. В панели задач показывается оригинальная иконка
Других отличий я не заметил (но особо много и не гонял).

Итого:
  1. На Windows 7 работает любая Delphi: от Delphi 1 до Delphi XE2 - вне зависимости от разрядности системы: лишь бы была подходящая редакция Windows.
  2. На Windows 7 в родном режиме работает почти любая версия Delphi: от Delphi 2 до Delphi XE2 - вне зависимости от разрядности системы. Но Delphi 2 и Delphi 3 ставить придётся ручками.
  3. Предположение: на 32-битной версии Windows 7 работает вообще всё - от Delphi 1 до Delphi XE2, и в родном режиме - вне зависимости от редакции системы (не проверялось).
  4. XP mode - это клёво :)

Примечание: в VMWare (кажется, Workstation) есть аналогичные XP mode возможности по интеграции с рабочим столом хост-системы. Я игрался с ними довольно давно, но тогда они меня не так впечатлили. Хотя может тут что-то изменилось. В любом случае, VMWare для меня теперь закрыта - и навряд ли я её буду ставить, даже если когда-то переустановлю чистую систему.

7 комментариев :

  1. С моими документами интересное решение...

    ОтветитьУдалить
  2. Классный пост! ))

    ОтветитьУдалить
  3. После чтения переводов Реймонда Чена и остальных про обратную совместимость - отличная демонстрация, спасибо :)

    ОтветитьУдалить
  4. Картинки не открываются...

    ОтветитьУдалить
  5. Видимо, браузер старый. Попробуйте: правой по картинке - открыть в новом окне.

    ОтветитьУдалить
  6. Delphi 1, 2, 3... Боже, как давно это было! Я на первой сопляком в девятом классе начинал, ощущения были как у царя и бога одновременно)))

    ОтветитьУдалить
  7. Большое спасибо. Приятно вспомнить молодость и воспользоваться советом ныне молодых.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и (опционально) ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.