任务:使用Installshield12 Installscript  Msi Project 打包ASP.NET应用程序,创建用户自定义的站点。

步骤:1,创建WEBNAME的Property。

Installshield12 创建自定义Web站点

2.在IS的IDE里配置IIS,如:
Installshield12 创建自定义Web站点

把WEB的虚拟目录设为[WEBNAME],安装后将使用这个属性的值,同样可以把Website名称用属性表示。注:IS在创建站点时,默认创建80端口站点,如果已有80端口的站点,虚拟目录将建在IS中80端口的站点下面,(正是我想要的,如默认会建到Default Web Site下面). 其他Virtual Diectory设置及权限设置等同于在IIS中设置

3.用脚本获取用户输入虚拟目录的名称
用SdShowDlgEdit1对话框即可,获取用户输入的名称,对WEBNAME Property赋值,Property 使用 方法。

关于卸载:这样用户自定义名称后,卸载不干净,我没有找到好的方法卸载IIS里面的虚拟目录。我相信有简单的法子就像创建时一样。以下是我使用的卸载脚本(WriteLog是我自定义的方法,adsutil.vbs可以从C:\Inetpub\AdminScripts下面找到)。把须删除的虚拟目录名称传入DelVirtualOnDefault即可:

Installshield12 创建自定义Web站点 /////////////////////////////////////////////////////////
Installshield12 创建自定义Web站点
//     Function:    DelVirtul
Installshield12 创建自定义Web站点
//     Purpose:     删除虚拟目录
Installshield12 创建自定义Web站点
//     Arguments:   szWebName  -  BYREF
Installshield12 创建自定义Web站点
//     Usage:
Installshield12 创建自定义Web站点
//       Note:         w3svc/1/root/ webname是1下的虚拟目录
Installshield12 创建自定义Web站点
/////////////////////////////////////////////////////////     
Installshield12 创建自定义Web站点
function DelVirtul(WebName,VirtualFolder)   
Installshield12 创建自定义Web站点
STRING szCmdLine,szCmd,szCmdLine2,szMsg;  
Installshield12 创建自定义Web站点NUMBER nResult;
Installshield12 创建自定义Web站点begin    
Installshield12 创建自定义Web站点    szCmd 
= WindowsFolder ^ "system32" ^ "cscript.exe";
Installshield12 创建自定义Web站点    szCmdLine 
= SUPPORTDIR ^"adsutil.vbs delete w3svc/"+WebName+"/root/"^VirtualFolder;  
Installshield12 创建自定义Web站点    szCmdLine2 
= SUPPORTDIR ^"adsutil.vbs delete w3svc/1/root/"^VirtualFolder;  
Installshield12 创建自定义Web站点    nResult
=LaunchAppAndWait(szCmd, szCmdLine, NOWAIT|LAAW_OPTION_HIDDEN); 
Installshield12 创建自定义Web站点    Sprintf(szMsg,
"Run "+szCmdLine+" result is %ld",nResult); 
Installshield12 创建自定义Web站点    WriteLog(szMsg);
Installshield12 创建自定义Web站点    nResult
=LaunchAppAndWait(szCmd, szCmdLine2, NOWAIT|LAAW_OPTION_HIDDEN);   
Installshield12 创建自定义Web站点    Sprintf(szMsg,
"Run "+szCmdLine2+" result is %ld",nResult); 
Installshield12 创建自定义Web站点    WriteLog(szMsg);
Installshield12 创建自定义Web站点    WriteLog(
"del virtualFolder:"+VirtualFolder+" on:"+WebName);
Installshield12 创建自定义Web站点
end;   
Installshield12 创建自定义Web站点
Installshield12 创建自定义Web站点 
/////////////////////////////////////////////////////////
Installshield12 创建自定义Web站点
//     Function:    DelVirtualOnDefault
Installshield12 创建自定义Web站点
//     Purpose:     把建在默认80端口的站点的同名虚拟目录删掉
Installshield12 创建自定义Web站点
//     Arguments:   VirtualFolder  -  虚拟目录的名称
Installshield12 创建自定义Web站点
//     Usage:
Installshield12 创建自定义Web站点
//       Note:        须引用IsGetObj.dll 
Installshield12 创建自定义Web站点
/////////////////////////////////////////////////////////       
Installshield12 创建自定义Web站点prototype ISGetObj.VBGetObject(byval 
string, byval string, byref OBJECT);
Installshield12 创建自定义Web站点prototype ISGetObj.ForEachStart(byref 
OBJECT, byref VARIANT);
Installshield12 创建自定义Web站点prototype ISGetObj.ForEachGetNextItem(byref VARIANT, byref 
OBJECT);  
Installshield12 创建自定义Web站点
//////////////////////////////////////////////////////////      
Installshield12 创建自定义Web站点prototype DelVirtualOnDefault(
STRING);
Installshield12 创建自定义Web站点 
function DelVirtualOnDefault(VirtualFolder)
Installshield12 创建自定义Web站点 
OBJECT objIIS_Root, objVirtDir,objWebService,objWebSite;  
Installshield12 创建自定义Web站点NUMBER nResult,nCount,nIndex;        
Installshield12 创建自定义Web站点VARIANT vTemp,strTemp,strTemp2;
Installshield12 创建自定义Web站点VARIANT __varEnumHolder;    
//Hold IEnumVariant during the ForEachLoop, don't use OBJECT type, this is an IUnknown!!
Installshield12 创建自定义Web站点
 begin 
Installshield12 创建自定义Web站点     UseDLL(SUPPORTDIR 
^ "IsGetObj.dll");
Installshield12 创建自定义Web站点        
set objWebService = CoGetObject("IIS://Localhost/W3svc"""); 
Installshield12 创建自定义Web站点        
if IsObject( objWebService ) then   
Installshield12 创建自定义Web站点            ForEachStart(objWebService, __varEnumHolder);
Installshield12 创建自定义Web站点               nResult 
= ForEachGetNextItem(__varEnumHolder, objWebSite); 
Installshield12 创建自定义Web站点         
while ( nResult = ERROR_SUCCESS )
Installshield12 创建自定义Web站点             
if IsObject(objWebSite) then    
Installshield12 创建自定义Web站点                 
if objWebSite.class = "IIsWebServer" then
Installshield12 创建自定义Web站点                     
Installshield12 创建自定义Web站点                     vTemp
= objWebSite.ServerBindings;
Installshield12 创建自定义Web站点                     strTemp 
= vTemp(0);     
Installshield12 创建自定义Web站点                     
if(strTemp==":80:")then
Installshield12 创建自定义Web站点                         
// 找到80端口下的站点Name
Installshield12 创建自定义Web站点                           strTemp2
=objWebSite.Name ;  
Installshield12 创建自定义Web站点                           WriteLog(
"webname:"+strTemp2);
Installshield12 创建自定义Web站点                           DelVirtul(strTemp2,VirtualFolder); 
Installshield12 创建自定义Web站点                       endif;
Installshield12 创建自定义Web站点                  endif;
Installshield12 创建自定义Web站点             endif;  
Installshield12 创建自定义Web站点               nResult 
= ForEachGetNextItem(__varEnumHolder, objWebSite);    
Installshield12 创建自定义Web站点          endwhile;
Installshield12 创建自定义Web站点    endif;
Installshield12 创建自定义Web站点    UnUseDLL(
"IsGetObj.dll");
Installshield12 创建自定义Web站点 
end;
Installshield12 创建自定义Web站点 
/***************************************************/


由于Installscript中没有for each ,其中调用了一个自定义的DLL:IsGetObj.dll

Download: IsGetObje.DLL文件

相关文章: