Installshield12 创建自定义Web站点

使用Installshield创建ASP.NET应用
本文介绍如何使用Installshield 12的Installscript MsiProject来打包ASP.NET应用程序,并创建用户自定义站点。文中详细描述了配置IIS的过程,包括设置虚拟目录和网站名称的属性,以及通过脚本获取用户输入。此外,还提供了卸载虚拟目录的脚本示例。

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

步骤:1,创建WEBNAME的Property。

property.jpg

2.在IS的IDE里配置IIS,如:
virtualpath.jpg

把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即可:

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


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

Download: IsGetObje.DLL文件

转载于:https://www.cnblogs.com/solo/archive/2008/01/02/1023197.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值