2013-10-03 255 views
1

我为一个经典的asp网站创建了一个安装程序。 我设法在我的“根”(默认网站)中安装网站。 但我想在“网站”下安装网站,但不是在“根”下安装网站,例如在现有的“演示”网站上。Inno setup安装网站不在根

任何想法? 我认为关键是在线路:

WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); 

的情况下,我使用的网站添加到IIS“根”的某些代码需要:

if (IISOptionsPage.Values[1] <> '') then begin 
    IISDefAppPool := IISOptionsPage.Values[1]; 
end else begin 
    IISDefAppPool := ExpandConstant('{#IISDefaultAppPool}'); 
end; 

{ Create the main IIS COM Automation object } 
try 
    IIS := CreateOleObject('IISNamespace'); 
except 
    RaiseException('IIS is not installed?.'#13#13'(Error: ''' + GetExceptionMessage); 
end; 

{ Connect to the IIS server } 

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

WebAppName := ExtractLastDir(ExpandConstant('{app}')); 

{ (Re)create a virtual dir } 

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

end; 

VDir := WebRoot.Create('IIsWebVirtualDir', WebAppName); 
VDir.AccessRead := True; 
VDir.AccessScript := True; 
VDir.AppFriendlyName := WebAppName; 
VDir.AspEnableParentPaths := True; 
VDir.Path := ExpandConstant('{app}'); 

try 
    VDir.AppPoolId := IISDefAppPool; 
except 
    MsgBox('AppPool not set.'#13#13'(Error: ''' + GetExceptionMessage, mbInformation, mb_Ok); 
end; 

try 
    VDir.AppCreate(True); 
except 
    MsgBox('App not created.'#13#13'(Error: ''' + GetExceptionMessage, mbInformation, mb_Ok); 
end; 

try 
    VDir.SetInfo(); 
except 
    MsgBox('Info no set.'#13#13'(Error: ''' + GetExceptionMessage, mbInformation, mb_Ok); 
end; 

回答

0

我不是COM自动化对象的专家,但如何通过“站点”作为参数:

VDir := WebRoot.Create('IIsWebVirtualDir', 'Sites\' + WebAppName); 

是否有可能在WebRoot.Create中创建子目录?我认为这是值得尝试:)

或第二的想法,通过“站点”中:

WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Sites'); 
+0

或许用斜线将工作:网站/ – Slappy