• Installshield12 创建自定义Web站点


    任务:使用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即可:

     /////////////////////////////////////////////////////////
    //     Function:    DelVirtul
    //     Purpose:     删除虚拟目录
    //     Arguments:   szWebName  -  BYREF
    //     Usage:
    //       Note:         w3svc/1/root/ webname是1下的虚拟目录
    /////////////////////////////////////////////////////////     
    function DelVirtul(WebName,VirtualFolder)   
    STRING szCmdLine,szCmd,szCmdLine2,szMsg;  
    NUMBER nResult;
    begin    
        szCmd 
    = WindowsFolder ^ "system32" ^ "cscript.exe";
        szCmdLine 
    = SUPPORTDIR ^"adsutil.vbs delete w3svc/"+WebName+"/root/"^VirtualFolder;  
        szCmdLine2 
    = SUPPORTDIR ^"adsutil.vbs delete w3svc/1/root/"^VirtualFolder;  
        nResult
    =LaunchAppAndWait(szCmd, szCmdLine, NOWAIT|LAAW_OPTION_HIDDEN); 
        Sprintf(szMsg,
    "Run "+szCmdLine+" result is %ld",nResult); 
        WriteLog(szMsg);
        nResult
    =LaunchAppAndWait(szCmd, szCmdLine2, NOWAIT|LAAW_OPTION_HIDDEN);   
        Sprintf(szMsg,
    "Run "+szCmdLine2+" result is %ld",nResult); 
        WriteLog(szMsg);
        WriteLog(
    "del virtualFolder:"+VirtualFolder+" on:"+WebName);
    end;   

     
    /////////////////////////////////////////////////////////
    //     Function:    DelVirtualOnDefault
    //     Purpose:     把建在默认80端口的站点的同名虚拟目录删掉
    //     Arguments:   VirtualFolder  -  虚拟目录的名称
    //     Usage:
    //       Note:        须引用IsGetObj.dll 
    /////////////////////////////////////////////////////////       
    prototype ISGetObj.VBGetObject(byval 
    string, byval string, byref OBJECT);
    prototype ISGetObj.ForEachStart(byref 
    OBJECT, byref VARIANT);
    prototype ISGetObj.ForEachGetNextItem(byref VARIANT, byref 
    OBJECT);  
    //////////////////////////////////////////////////////////      
    prototype DelVirtualOnDefault(
    STRING);
     
    function DelVirtualOnDefault(VirtualFolder)
     
    OBJECT objIIS_Root, objVirtDir,objWebService,objWebSite;  
    NUMBER nResult,nCount,nIndex;        
    VARIANT vTemp,strTemp,strTemp2;
    VARIANT __varEnumHolder;    
    //Hold IEnumVariant during the ForEachLoop, don't use OBJECT type, this is an IUnknown!!
     begin 
         UseDLL(SUPPORTDIR 
    ^ "IsGetObj.dll");
            
    set objWebService = CoGetObject("IIS://Localhost/W3svc"""); 
            
    if IsObject( objWebService ) then   
                ForEachStart(objWebService, __varEnumHolder);
                   nResult 
    = ForEachGetNextItem(__varEnumHolder, objWebSite); 
             
    while ( nResult = ERROR_SUCCESS )
                 
    if IsObject(objWebSite) then    
                     
    if objWebSite.class = "IIsWebServer" then
                         
                         vTemp
    = objWebSite.ServerBindings;
                         strTemp 
    = vTemp(0);     
                         
    if(strTemp==":80:")then
                             
    // 找到80端口下的站点Name
                               strTemp2
    =objWebSite.Name ;  
                               WriteLog(
    "webname:"+strTemp2);
                               DelVirtul(strTemp2,VirtualFolder); 
                           endif;
                      endif;
                 endif;  
                   nResult 
    = ForEachGetNextItem(__varEnumHolder, objWebSite);    
              endwhile;
        endif;
        UnUseDLL(
    "IsGetObj.dll");
     
    end;
     
    /***************************************************/


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

    Download: IsGetObje.DLL文件

  • 相关阅读:
    从Hello World说起(Dart)到“几乎所有东西都是Widget”小部件。
    C#开发者工具网
    sqlitestudio
    jstat命令 Java Virtual Machine Statistics Monitoring Tool
    ProxyPass与ProxyPassReverse及ProxyPassMatch的概述
    IBM MQ介绍
    sun misc unsafe类的使用
    Android Webview实现文件下载功能
    使用OpenSSL生成私钥 Private Key 以及根据Private Key创建证书
    阿里巴巴的面试
  • 原文地址:https://www.cnblogs.com/solo/p/1023197.html
Copyright © 2020-2023  润新知