автор: 1999 Александр Качанов
перевод: n|a
Ох, как я намучался с этой проблемой. Главное, IIS (и Apache) грузит dll в память, и если вы, обнаружив ошибку в программе или улучшив ее чем-то, попытаетесь подменить старую dll на новую исправленную, операционная система вам скажет: Access denied. Естественно - файл считан в память, и пока он там находится перезаписать его невозможно.
Не стоит отчаиваться. Можно попытаться выгрузить dll. Для этого откройте Microsoft Management Console, перейдите на виртуальный каталог скриптов, вызовите его свойства и найдите на странице Home Directory кнопку Unload. Если она не была серой, вам повезло. Если при нажатии на нее, ваша dll выгрузилась, вам повезло вдвойне. Если вас постигла неудача, попытайтесь остановить Web-сервер. Если и здесь вы потерпели фиаско, воспользуйтесь знаменитой программой fkill.exe, которая способна убить любой процесс в Windows NT. С помощью Task Manager узнайте какой PID у файла inetinfo.exe (это и есть IIS) и убейте его с помощью команды:
IIS остановится, ваша dll будет выгружена из памяти, и вы сможете теперь поверх старой записать новую.fkill.exe <PID>
Но не торопитесь снова запускать IIS. Перед этим откройте панель настройки Web-сервера. Выберите его свойства, откройте вкладку Home Directory, нажмите кнопку Configuration и снимите эту гадкую галочку, что стоит возле фразы Cache ISAPI application.
Теперь ваша dll будет загружаться в память лишь на время исполнения. После выполнения операции (если она благополучно завершится) она будет выгружена из памяти, и вам не надо будет мучаться при записи новой версии dll. Естественно это скажется на скорости выполнения, но при отладке это вряд ли имеет значения. После того, как вы полностью закончите написание ISAPI-dll, галочку можно вернуть.
Разработка ISAPI-dll
Данная статья - не учебник по программированию. Поэтому вдаваться в подробности написания ISAPI-dll я не буду. Скажу только, что вполне удобной средой для создания этих программ является Delphi начиная с версии 3.0.
В репозитарии приложений (Applications) найдите пиктограмму "Web Server Applications" и на вопрос, какой тип приложения создавать, выберите ISAPI/NSAPI. Delphi создаст автоматически скелет приложения, и вам останется только творческая задача - создать подпрограммы (в терминологии Delphi они называются Actions), которые будут выполнять те или иные функции в вашем ISAPI-модуле. При написании ISAPI-программы в Delphi вам полностью доступны все вкусности CGI-программ: формирование cookies, переменные окружения, переменные запросов POST/GET
1. Введение
2. Отладка и разработка
« назад к списку статей