Как запустить Delphi 7 из EXE-файла, написанного на Delphi XE?

Я занимаюсь некоторой автоматизацией сборки и хотел бы запустить IDE Delphi 7 из приложения, которое я пишу с помощью Delphi XE.

Моя среда IDE Delphi 7 находится по адресу:

'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe'

пока делаю:

ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', '', sw_ShowNormal );

в конечном итоге попадает в IDE Delphi 7, но только после множества ошибок, связанных с отсутствием пакетов.

Делает:

ShellExecute( Handle, 'Open', 'C:\windows\notepad.exe', '', '', sw_ShowNormal );

работает открытие файла Блокнотом.

У меня также есть командный файл с именем Delphi7IDE.bat, который открывает Delphi 7, когда я щелкаю командный файл, но выполняю:

ShellExecute( Handle, 'Open', 'C:\sys\batch\Delphi7IDE.bat', '', '', sw_ShowNormal );

выдает те же ошибки, что и выше.

Я пробовал использовать директорию, как указано в моем ярлыке меню Delphi 7 (т.е. вызов:

ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', 'C:\Program Files\Borland\Delphi7\Projects\', sw_ShowNormal );"

но это дает ту же ошибку (и этого следовало ожидать, потому что в приведенном выше примере командного файла нет фиксированного каталога и он отлично работает при нажатии).

Есть несколько ошибок, но пример одной из них: this one

Что я делаю не так, пожалуйста?


person Brian Frost    schedule 15.05.2011    source источник
comment
Скорее предположение, чем ответ, но правильно ли вы установили текущий каталог?   -  person Mason Wheeler    schedule 15.05.2011
comment
@Mason: Спасибо, но я пробовал это безуспешно, и я обновил сообщение, включив это и сообщение об ошибке на случай, если там появится подсказка.   -  person Brian Frost    schedule 16.05.2011
comment
Этого не должно быть, но вы пытались передать 0 в качестве дескриптора и nil в качестве глагола (первый и второй аргумент соответственно) в ShellExecute?   -  person Andreas Rejbrand    schedule 16.05.2011
comment
Также скорее предположение: может быть, дело в ограничении доступа к некоторым вашим файлам / пакетам?   -  person Andreas    schedule 16.05.2011


Ответы (3)


Теперь я думаю, что понял. Delphi 7 устарел. Windows Vista (или 7) новая. Вы запускаете delphi32.exe от имени администратора, для совместимости, не так ли? То есть, если вы щелкните правой кнопкой мыши delphi32.exe (или ярлык), вы выбрали "Запустить эту программу от имени администратора" в вкладка «Совместимость». Если вы запустите delphi32.exe от имени администратора, все в порядке, но если вы этого не сделаете, вы получите все эти ошибки во время запуска.

И теперь, когда вы ShellExecute delphi32.exe из своего приложения Delphi, delphi32.exe наследует привилегии вашего приложения Delphi. Скорее всего, он работает без повышенных привилегий, и delphi32.exe тоже.

Решение: щелкните правой кнопкой мыши приложение Delphi (например, Project1.exe), выберите вкладку «Совместимость» и установите флажок «Запускать эту программу от имени администратора».

person Andreas Rejbrand    schedule 15.05.2011
comment
Ты совершенно прав. Отличная работа. Я также попытался запустить XE IDE от имени администратора, но ошибка осталась. Итак, как же тогда XE запускает процесс? Я проверю высоту в коде. Спасибо. - person Brian Frost; 16.05.2011

Вы, вероятно, ошиблись с рабочим каталогом. Щелкните правой кнопкой мыши значок «Delphi 7» в меню «Пуск» и нажмите Ctrl + C в рабочем каталоге этого ярлыка. Используйте эту строку как параметр Directory для ShellExecute.

У меня нет системы Delphi 7 для экспериментов, но на моей виртуальной машине WIndows 95, на которой у меня установлен Delphi 4, действительно есть указанный рабочий каталог:

Свойства ярлыка Delphi 4 в Windows 95

person Andreas Rejbrand    schedule 15.05.2011
comment
Кстати, вы все не скучаете по Windows 95? - person Andreas Rejbrand; 15.05.2011
comment
Да, я скучаю по нему, как по зубной боли. Надеюсь, у вас есть эта виртуальная машина для регрессионного тестирования, и не из-за какого-то болезненного мазохистского фетиша. - person Wouter van Nifterick; 15.05.2011
comment
Да конечно; Скучаю по раздачам дискет и случайным синим экранам смерти :) +1 все равно - person ; 15.05.2011
comment
@Andreas: Спасибо, но это не так. Почему командный файл работает нормально, но не запускается из ShellExecute? Есть ли какие-то вещи об окружающей среде, которые мне не хватает? - person Brian Frost; 16.05.2011
comment
@Brian: Можете ли вы опубликовать пакетный файл? - person Andreas Rejbrand; 16.05.2011
comment
@Brian: А что будет, если просто Win + R delphi32? - person Andreas Rejbrand; 16.05.2011

Это может вас заинтересовать: http://msdn.microsoft.com/en-us/library/ms682431(v=vs.85).aspx А вот пример использования этой функции в Delphi: http://www.delphi3000.com/article/article_4176.asp

person Pateman    schedule 18.05.2011