2010-08-18 7 views
11

Je tente de déployer une application ASP.NET à l'aide du programme Inno Setup.Comment créer une application IIS et un pool d'applications à l'aide du script Inno Setup

-je effectuer les tâches suivantes:

  1. Créer une application IIS.
  2. Créez un nouveau pool d'applications IIS et définissez sa version .NET sur 4.
  3. Définissez le pool d'applications de la nouvelle application sur le nouveau pool d'applications.

J'ai trouvé un script pour créer un répertoire virtuel, mais je besoin d'un pool d'applications et de l'application:

procedure CreateIISVirtualDir(); 
var 
    IIS, WebSite, WebServer, WebRoot, VDir: Variant; 
    ErrorCode: Integer; 
begin 
    { Create the main IIS COM Automation object } 

    try 
    IIS := CreateOleObject('IISNamespace'); 
    except 
    RaiseException(
     'Please install Microsoft IIS first.'#13#13'(Error ''' + 
     GetExceptionMessage + ''' occurred)'); 
    end; 

    { Connect to the IIS server } 

    WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); 
    WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); 
    WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); 

    { (Re)create a virtual dir } 

    try 
    WebRoot.Delete('IIsWebVirtualDir', 'eipwebv4'); 
    WebRoot.SetInfo(); 
    except 
    end; 

    VDir := WebRoot.Create('IIsWebVirtualDir', 'eipwebv4'); 
    VDir.AccessRead := True; 
    VDir.AccessScript := TRUE; 
    VDir.AppFriendlyName := 'Easy-IP Web Client'; 
    VDir.Path := ExpandConstant('{app}'); 
    try 
    VDir.AppPoolId := 'Classic .NET AppPool'; 
    except 
    end; 

    VDir.AppCreate(True); 
    VDir.SetInfo(); 
end; 

Répondre

7

La question a été posée il y a longtemps, mais peut-être que quelqu'un va trouver ce script pour IIS6/IIS7 utile:

var 
    global_AppCmdFilePath :String; 
    global_IsIIS7 :Boolean; 
    global_WebSites :SiteList; 
    global_WebSiteName :String; 
    global_vDir :String; 
    global_AppCmdExitCode :Integer; 

const 
    IISServerName = 'localhost'; 
    IISApplicationPoolName = 'Test Pool'; 

    ERROR_NOT_FOUND = 1168; 
    ERROR_NOT_SUPPORTED = 50; 

    MD_APPPOOL_IDENTITY_TYPE_LOCALSYSTEM = 0; 
    MD_APPPOOL_IDENTITY_TYPE_LOCALSERVICE = 1; 
    MD_APPPOOL_IDENTITY_TYPE_NETWORKSERVICE = 2; 
    MD_APPPOOL_IDENTITY_TYPE_SPECIFICUSER = 3; 

    MD_LOGON_INTERACTIVE = 0; 
    MD_LOGON_BATCH = 1; 
    MD_LOGON_NETWORK = 2; 
    MD_LOGON_NETWORK_CLEARTEXT = 3; 

function ExecAppCmd(params :String) :Boolean; 
var 
    execSuccessfully :Boolean; 
    resultCode :Integer; 
begin 
    execSuccessfully := Exec('cmd.exe', '/c ' + global_AppCmdFilePath + ' ' + params, '', SW_HIDE, ewWaitUntilTerminated, resultCode); 

    global_AppCmdExitCode := resultCode; 

    Result := execSuccessfully and (resultCode = 0); 
end; 


function CreateVirtualDirectoryForIIS6(physicalPath :String) :String; 
var 
    IIS, webService, webServer, webRoot, vDir, vDirApp :Variant; 
    appPools, appPool :Variant; 
    webSiteId :String; 
begin 
    webSiteId := GetWebSiteIdByName(global_WebSiteName); 

    { Create the main IIS COM Automation object. } 
    IIS := CreateOleObject('IISNamespace'); 

    { Get application pools. } 
    appPools := IIS.GetObject('IIsApplicationPools', 'localhost/W3SVC/AppPools'); 

    try 
    { Check if the application pool already exists. } 
    appPool := appPools.GetObject('IIsApplicationPool', IISApplicationPoolName); 
    except 
    { Crete the application pool. } 
    try 
     appPool := appPools.Create('IIsApplicationPool', IISApplicationPoolName); 

     appPool.LogonMethod := MD_LOGON_NETWORK_CLEARTEXT; 
     appPool.AppPoolIdentityType := MD_APPPOOL_IDENTITY_TYPE_NETWORKSERVICE; 

     appPool.SetInfo(); 
    except 
     Result := 'Failed to create an apllication pool.'; 
     Exit; 
    end; 
    end; 

    { Connect to the IIS server. } 
    webService := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); 

    { Get the website. } 
    webServer := webService.GetObject('IIsWebServer', webSiteId); 
    webRoot := webServer.GetObject('IIsWebVirtualDir', 'Root'); 

    { Delete the virtual dir if it already exists. } 
    try 
    webRoot.Delete('IIsWebVirtualDir', global_vDir); 
    webRoot.SetInfo(); 
    except 
    { An exception will be raised if there is not such a website. } 
    end; 

    { Create the virtual directory. } 
    try 
    vDir := WebRoot.Create('IIsWebVirtualDir', global_vDir); 

    vDir.AccessRead := True; 
    vDir.AccessScript := True; 
    vDir.AppFriendlyName := 'Test friendly name'; 
    vDir.Path := physicalPath; 

    vDir.AppCreate(False); 

    vDir.SetInfo(); 
    except 
    Result := 'Failed to create a virtual directory.'; 
    Exit; 
    end; 

    { Assign the application pool to the virtual directory. } 
    try 
    vDir := webRoot.GetObject('IIsWebVirtualDir', global_vDir); 

    vDir.AppPoolId := IISApplicationPoolName; 

    vDir.SetInfo(); 
    except 
    Result := 'Failed to assign the application pool to the virtual directory.'; 
    Exit; 
    end; 
end; 

function CreateVirtualDirectoryForIIS7(physicalPath :String) :String; 
var 
    tempFileName :String; 
    appPoolList :String; 
    createAppPool :Boolean; 
begin 
    { Delete the application if it already exists. } 
    if not ExecAppCmd(Format('delete app "%s/%s"', [global_WebSiteName, global_vDir])) then 
    begin 
    if (global_AppCmdExitCode <> ERROR_NOT_FOUND) and (global_AppCmdExitCode <> ERROR_NOT_SUPPORTED) then 
    begin 
     Result := 'Failed to delete the application. ' + GetErrorMessageByCode(global_AppCmdExitCode); 
     Exit; 
    end; 
    end; 

    { Check if the application pool already exists. } 
    tempFileName := ExpandConstant('{tmp}\AppPoolNames.txt'); 

    ExecAppCmd(Format('list apppool "%s" > "%s"', [IISApplicationPoolName, tempFileName])); 

    if (LoadStringFromFile(tempFileName, appPoolList)) then 
    begin 
    createAppPool := (Pos(IISApplicationPoolName, appPoolList) = 0); 
    end 
    else 
    begin 
    createAppPool := True; 
    end; 

    { Create the application pool. } 
    if (createAppPool) then 
    begin 
    if not ExecAppCmd(Format('add apppool /name:"%s" /managedRuntimeVersion:v4.0', [IISApplicationPoolName])) then 
    begin 
     Result := 'Failed to add the application pool. ' + GetErrorMessageByCode(global_AppCmdExitCode); 
     Exit; 
    end; 
    end; 

    { Create the application. } 
    if not ExecAppCmd(Format('add app /site.name:"%s" /path:"/%s" /physicalPath:"%s" /applicationPool:"%s"', [global_WebSiteName, global_vDir, physicalPath, IISApplicationPoolName])) then 
    begin 
    Result := 'Failed to add the application. ' + GetErrorMessageByCode(global_AppCmdExitCode); 
    Exit; 
    end; 

    Result := ''; 
end; 
+0

Je voudrais d'abord vous remercier pour votre réponse, c'est exactement ce que je dois faire, mais j'ai du mal à comprendre les choses. D'abord, qu'est-ce que je devrais envoyer en tant que mon «physicalPath» en essayant de créer VirtualDirectoryForIIs7, par exemple? –

+1

'physicalPath' est le chemin sur le disque où votre application ASP.NET est stockée. –

+0

Cela signifie-t-il que je devrai inclure tous les fichiers relatifs à mon application ASP.NET dans le bloc [Files] de mon script? Merci encore de m'avoir aidé –

Questions connexes