2010-08-18 16 views
11

Estoy intentando implementar una aplicación ASP.NET utilizando Inno Setup.¿Cómo puedo crear una aplicación IIS y un grupo de aplicaciones usando la secuencia de comandos Inno Setup?

que necesitan para llevar a cabo las siguientes tareas:

  1. crear una aplicación IIS.
  2. Cree un nuevo grupo de aplicaciones IIS y configure su versión .NET en 4.
  3. Establezca el grupo de aplicaciones de la nueva aplicación en el nuevo grupo de aplicaciones.

He encontrado un script para crear un directorio virtual, pero necesito una aplicación y la aplicación de la piscina:

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; 

Respuesta

7

La pregunta fue hecha hace mucho tiempo, pero tal vez alguien se encuentra este guión para IIS6/IIS7 útil:

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

En primer lugar, me gustaría agradecerle su respuesta, esto es exactamente lo que tengo que hacer, pero estoy teniendo dificultades para resolver las cosas. Primero, ¿qué tendría que enviar como mi 'physicalPath' cuando intento crear VirtualDirectoryForIIs7, como ejemplo? –

+1

'physicalPath' es la ruta en el disco donde se almacena su aplicación ASP.NET. –

+0

¿Esto significa que tendré que incluir todos los archivos que tienen que ver con mi aplicación ASP.NET en el bloque [Archivos] de mi script? Gracias de nuevo por ayudarme –

Cuestiones relacionadas