2010-08-18 24 views
11

का उपयोग कर आईआईएस एप्लिकेशन और एप्लिकेशन पूल कैसे बना सकता हूं, मैं इनो सेटअप का उपयोग कर एएसपी.NET एप्लिकेशन को तैनात करने की कोशिश कर रहा हूं।मैं इनो सेटअप स्क्रिप्ट

मैं निम्न कार्य करने की जरूरत है:

  1. आईआईएस एक आवेदन बनाएँ।
  2. एक नया आईआईएस एप्लिकेशन पूल बनाएं और इसे .NET संस्करण 4 पर सेट करें।
  3. नए एप्लिकेशन पूल के नए पूल के एप्लिकेशन पूल को सेट करें।

मैं एक वर्चुअल निर्देशिका बनाने के लिए एक स्क्रिप्ट पाया है, लेकिन मैं एक आवेदन और अनुप्रयोग पूल की जरूरत है:

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; 

उत्तर

7

सवाल एक लंबे समय पहले कहा गया था लेकिन शायद किसी को IIS6/IIS7 उपयोगी के लिए इस स्क्रिप्ट मिलेगी:

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

मैं आपकी प्रतिक्रिया के लिए सबसे पहले धन्यवाद देना चाहता हूं, यह वही है जो मुझे करने की ज़रूरत है, लेकिन मुझे चीजों को समझने में मुश्किल हो रही है। सबसे पहले, उदाहरण के रूप में, VirtualDirectoryForIIs7 बनाने की कोशिश करते समय मुझे अपने 'भौतिकपाथ' के रूप में क्या भेजने की आवश्यकता होगी? –

+1

'भौतिकपाथ' डिस्क पर पथ है जहां आपका एएसपी.NET एप्लिकेशन संग्रहीत किया जाता है। –

+0

क्या इसका मतलब यह है कि मुझे अपनी फ़ाइलों में [फाइल] ब्लॉक में मेरे एएसपी.NET एप्लिकेशन के साथ सभी फाइलों को शामिल करने की आवश्यकता होगी? –

0

ये लीजिए: http://learn.iis.net/page.aspx/285/provisioning-sample-in-c/

नीचे Create Application Pool स्क्रॉल। यह आपको ऐपपूल, एप्लिकेशन और वर्चुअल डायरेक्टरीज़ बनाने का तरीका दिखाएगा।

+0

धन्यवाद, लेकिन मैं एक उदाहरण InnoSetup प्रयोग करने के लिए देख रहा हूँ। – norgepaul

+0

आह उसे याद किया। – Jeroen

संबंधित मुद्दे