Несколько общих переменных и констант:
var
WebSiteNamePage: TInputQueryWizardPage;
DispatchWebSiteName: string;
const
IISServerName = 'localhost';
IISServerNumber = '1';
В самом начале убеждаемся, что все необходимое на месте:function InitializeSetup(): Boolean;
begin
// Проверка, что установлено все необходимое ПО
result := IsDotNet35Installed() and IsSQLServerInstalled() and IsIISInstalled();
end;
// Проверка, что установлен Microsoft IIS
function IsIISInstalled() : Boolean;
var
IIS: Variant;
begin
try
IIS := CreateOleObject('IISNamespace');
result:=true;
except
result:=false;
MsgBox( CustomMessage('InstallIIS'), mbError, MB_OK );
end;
end;
Собственно создание сайта у меня происходит в PostInstall(), когда уже скопированы все файлы сайта:// Действия после установки
procedure PostInstall();
begin
// Создать виртуальный каталог IIS для сайта
CreateDispatchVirtualDir();
end;
// Создание сайта на основе каталога со скопированными файлами
function CreateDispatchVirtualDir() : Boolean;
var
IIS, WebSite, WebServer, WebRoot, VDir: Variant;
ErrorCode: Integer;
begin
result:=true;
// подключение к IIS
try
IIS := CreateOleObject('IISNamespace');
except
result:=false;
MsgBox( CustomMessage('InstallIIS'), mbError, MB_OK );
end;
if result then
begin
try
// берем рычаги
DispatchWebSiteName := WebSiteNamePage.Values[0];
WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
// удаляем виртуальный каталог, который собираемся создавать
try
WebRoot.Delete('IIsWebVirtualDir', DispatchWebSiteName);
// сохранить изменения
WebRoot.SetInfo();
except
end;
// создаем виртуальный каталог
VDir := WebRoot.Create('IIsWebVirtualDir', DispatchWebSiteName);
VDir.AccessRead := True;
VDir.AccessScript:=true;
VDir.DefaultDoc:='default.aspx';
VDir.AppFriendlyName := DispatchWebSiteName;
VDir.Path := ExpandConstant('{app}');
VDir.AppCreate(True);
// сохранить изменения
VDir.SetInfo();
// открываем сайт в браузере
ShellExec( 'open', 'http://' + IISServerName + '/' + DispatchWebSiteName + '/', '', '', SW_SHOW, ewNoWait, ErrorCode );
result:=true;
except
MsgBox( CustomMessage('VirtualDirNotInstalled'), mbError, MB_OK );
result:=false;
end;
end;
end;
Ну и удаление при деинсталляции:// Действия после деинсталляции
procedure PostUninstall();
begin
DeleteDispatchVirtualDir();
end;
// Удаление виртуального каталога
function DeleteDispatchVirtualDir() : Boolean;
var
IIS, WebSite, WebServer, WebRoot: Variant;
begin
result:=true;
// подключение к IIS
try
IIS := CreateOleObject('IISNamespace');
except
result:=false;
end;
if result then
begin
try
// берем рычаги
WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
// удаляем виртуальный каталог
try
WebRoot.Delete('IIsWebVirtualDir', DispatchWebSiteName);
// сохранить изменения
WebRoot.SetInfo();
except
end;
result:=true;
except
result:=false;
end;
end;
end;
Скрипт проверен на windows 2003 и 2008. Надо только не забывать в 2008-й при настройке ролей сервера дополнительно инсталлировать компоненты, обеспечивающие совместимость со средствами управления IIS6:
Комментариев нет:
Отправить комментарий