На самом деле я "решил" это вчера, до сих пор не нашел ничего другого на эту тему, поэтому я думаю, что мы пионеры;). Я начал долгие строки, которые вы сделали, но я не смог найти никакой полезной документации и пошел по другому пути. Хотя мое решение работает, оно очень грязное.
Обычно я запускаю скрипт VB, который выводит список веб-сайтов в текстовый файл, а затем считываю этот текстовый файл обратно в настройку Inno. Ниже приведен мой грубый код, я планирую привести его в порядок и позже добавить соответствующую обработку ошибок.
Website.vbs
OPTION EXPLICIT
DIM CRLF, TAB
DIM strServer
DIM objWebService
strServer = "localhost"
CRLF = CHR( 13 ) & CHR( 10 )
' WScript.Echo "Enumerating websites on " & strServer & CRLF
SET objWebService = GetObject( "IIS://" & strServer & "/W3SVC" )
EnumWebsites objWebService
SUB EnumWebsites( objWebService)
DIM objWebServer, objWebServerRoot, strBindings
Dim objFSO, objFolder, objShell, objTextFile, objFile
Dim strDirectory, strFile, strText
strFile = "website.txt"
' Create the File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFile) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFile = objFSO.CreateTextFile(strFile)
' Wscript.Echo "Just created " & strDirectory & strFile
End If
set objFile = nothing
set objFolder = nothing
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile _
(strFile, ForAppending, True)
FOR EACH objWebServer IN objWebService
IF objWebserver.Class = "IIsWebServer" THEN
SET objWebServerRoot = GetObject(objWebServer.adspath & "/root")
' Writes strText every time you run this VBScript
objTextFile.WriteLine(objWebServer.ServerComment)
END IF
NEXT
objTextFile.Close
END SUB
Innosetup скрипт
[Code]
var
WebsitePage: TWizardPage;
ComboBox: TNewComboBox;
WebSite: Variant;
WebServer: Variant;
WebRoot: Variant;
ErrorCode: Integer;
ResultCode: Integer;
Sites: AnsiString;
procedure InitializeWizard;
begin
ExtractTemporaryFile('Website.vbs');
if not ShellExec('', ExpandConstant('{tmp}\Website.vbs'), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
begin
MsgBox('Oh no!:' #13#13 'The file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
end;
if LoadStringFromFile(ExpandConstant('{tmp}\website.txt'), Sites) then
begin
//MsgBox(Sites, mbInformation, MB_OK);
end else begin
Exit;
end;
WebsitePage := CreateCustomPage(DataDirPage.ID, 'Select which website you wish to install to',
'Which website should the application be install to?');
ComboBox := TNewComboBox.Create(WebsitePage);
ComboBox.Width := WebsitePage.SurfaceWidth;
ComboBox.Parent := WebsitePage.Surface;
ComboBox.Style := csDropDownList;
ComboBox.Items.Text := Sites;
ComboBox.ItemIndex := 0;
end;