gpt4 book ai didi

asp.net - 如何使用 Inno Setup 脚本创建 IIS 应用程序和应用程序池

转载 作者:行者123 更新时间:2023-12-04 01:07:48 24 4
gpt4 key购买 nike

我正在尝试使用 Inno Setup 部署 ASP.NET 应用程序。

我需要执行以下任务:

  • 创建一个 IIS 应用程序。
  • 创建一个新的 IIS 应用程序池并将其 .NET 版本设置为 4。
  • 将新应用的应用池设置为新应用池。

  • 我找到了一个创建虚拟目录的脚本,但我需要一个应用程序和应用程序池:

    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;

    最佳答案

    很久以前就有人问过这个问题,但也许有人会发现这个用于 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;

    关于asp.net - 如何使用 Inno Setup 脚本创建 IIS 应用程序和应用程序池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512805/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com