asp.net – 如何使用Inno Setup脚本创建IIS应用程序和应用程序池
发布时间:2020-12-31 00:53:11 所属栏目:asp.Net 来源:互联网
导读:我试图使用Inno Setup部署一个ASP.NET应用程序. 我需要执行以下任务: 创建IIS应用程序. 创建一个新的IIS应用程序池,并将它的.NET版本设置为4. 将新应用程序的应用程序池设置为新的应用程序池. 我已经找到一个脚本来创建虚拟目录,但是我需要一个应用程序和应
|
我试图使用Inno Setup部署一个ASP.NET应用程序. 我需要执行以下任务: >创建IIS应用程序. 我已经找到一个脚本来创建虚拟目录,但是我需要一个应用程序和应用程序池: 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_vDir,physicalPath,IISApplicationPoolName])) then
begin
Result := 'Failed to add the application. ' + GetErrorMessageByCode(global_AppCmdExitCode);
Exit;
end;
Result := '';
end; (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在ASP.NET MVC中动态地从数据库生成CSS文件
- asp.net-mvc-3 – 如何在ASP.NET MVC中创建递归结构
- ASP.NET缓存的方法和最佳实践
- ASP.NET web.config文件是否失控?
- asp.net – ASP.NET中的“关键字不支持:”错误
- asp.net中使用repeater和PageDataSource搭配实现分页代码
- 为什么asp.net会员资格有用户表和会员表?
- MVC .Net Cascade在使用EF Code First Approach时删除
- asp.net-mvc-4 – AngularJs,DropZone.Js,MVC4 – 拖放,预览
- asp.net-mvc-3 – 将数组传递给RouteValues,并将其渲染为粘
推荐文章
站长推荐
- asp.net – 是否可以根据用户角色隐藏/显示Kendo
- ASP.NET MVC全能路由
- asp.net – 为不同项目中的所有Web应用程序网页添
- asp.net-mvc – 在ASP.NET MVC中实现工作单元的方
- asp.net-mvc – ASP.NET MVC jQueryUI datepicke
- 如何在ASP.NET Web应用程序中打开一个SectionGro
- asp.net-mvc – MVC错误 – 传入字典的模型项目的
- ASP.NET TextBox LostFocus事件
- asp.net-mvc – 为什么我在带有godaddy服务器的M
- asp.net – Html.Partial()跳过控制器动作
热点阅读
