2013-11-21 155 views
3

我使用wix爲網站創建了一個安裝程序。在安裝期間,用戶接受虛擬目錄的名稱。如果用戶給出的名稱不同於參考目錄的名稱,那麼虛擬目錄和參考目錄都會列在IIS中,這是我不想要的。如何通過在安裝過程中將引用目錄的名稱替換爲虛擬目錄的名稱來避免這種情況。所有幫助讚賞。以下是我用過的主要wxs文件的代碼。在WiX IIS安裝程序中重寫參考目錄的名稱與虛擬目錄的名稱

謝謝。

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"> 
<!-- The upgrade GUID ** DO NOT CHANGE!! **--> 
<?define ProductUpgradeCode="da7c5352-634c-408c-ad5c-5ff806106378"?> 
    <!-- The product version. --> 
<?define InstallVersion="1.0.0.0"?> 
<?define DirName="C:\inetpub\wwwroot"?> 
    <!-- It's aways a major upgrade here. --> 
    <Product Id="*" 
     Name="Basic Web App Install Example" 
     Language="1033" 
     Version="$(var.InstallVersion)" 
     Manufacturer="John Robbins/Wintellect" 
     UpgradeCode="$(var.ProductUpgradeCode)"> 
    <Package Id="*" 
      Description="A simple web site installation" 
     Comments="Just showing how it works." 
     Manufacturer="John Robbins/Wintellect" 
     InstallerVersion="300" 
     Languages="1033" 
     Compressed="yes" 
     SummaryCodepage="1252" 
     InstallPrivileges="elevated"/> 


    <!-- Major upgrade checks. --> 
    <MajorUpgrade Schedule="afterInstallInitialize" 
       DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/> 

    <UIRef Id="WixUI_InstallWeb" /> 
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />  
    <Property Id="_BrowseProperty" Value="INSTALLDIR" /> 
    <Property Id="WIXUI_VIRTUALDIR" Value="VIRTUALDIR" /> 
    <Property Id="VIRTUALDIR"><![CDATA[Staffbank]]></Property>  
    <!-- Check to see if IIS is installed. It it's not, error out. -->  
    <Property Id="IIS_MAJOR_VERSION"> 
    <RegistrySearch Id="CheckIISVersion" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="MajorVersion" Type="raw" /> 
    </Property> 

    <Condition Message="IIS must be installed"> 
    Installed OR IIS_MAJOR_VERSION 
    </Condition> 

    <!-- Go find the IIS root directory from the registry. On most machines 
    that defaults to C:\inetpub\wwwroot. This will be the directory we 
    install into. --> 
<Property Id="IISROOT"> 
    <RegistrySearch Id="IISROOT" 
        Type="directory" 
        Root="HKLM" 
        Key="Software\Microsoft\InetStp" 
        Name="PathWWWRoot" /> 
    </Property> 

    <Condition Message="IIS does not appear to be installed correctly, the root directory is not set."> 
    Installed OR IISROOT 
    </Condition> 

    <!-- Describe the media source (you always have to have this) --> 
    < Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

    <!-- The root of life for any installer. --> 
    <Directory Id='TARGETDIR' Name='SourceDir'> 
    <!-- Install into the ISS root directory we found earlier. --> 
    <Directory Id="IISROOT" Name='WebDir'> 
    <!-- Here's this installers install location. --> 
    <Directory Id='INSTALLDIR' Name='Staffbank'></Directory> 
    </Directory> 
    </Directory> 
    <DirectoryRef Id='INSTALLDIR' >   
     <!--Creating the webpool for our site--> 

     <Component Id="MyWebAppPoolCmp" Guid="{98da0c81-999d-4de8-bb8e-4e9a61ae31e5}" KeyPath="yes" Permanent="yes">    
     <iis:WebAppPool Id="MyWebAppPool" Name="ASP.NET v4.0"></iis:WebAppPool> 
     </Component> 
     <!-- The component to define the Virtual Directory.--> 
     <Component Id="WebVirtualDirComponent" 
       Guid="D814F88F-6E0C-4365-A411-2F9807522C3D"> 
     <!-- The virtual directory we are installing. --> 
     <!-- The Alias attribute is the name thata will be put into IIS.--> 
     <!-- The Directory attribute is the "Physical Path" property in 
       IIS and needs to tie to an ID specified in the setup. --> 
     <!-- The WebSite attribute ties to a <WebSite> element in the 
      setup file. As this is an example of installing into the 
      "Default Web Site" that element is not under a component.--> 
     <iis:WebVirtualDir Id="VDir" 
          Alias="[VIRTUALDIR]" 
          Directory="INSTALLDIR" 
          WebSite="DefaultWebSite"> 
      <!-- Turn the Virtual Directory into a web application. --> 
      <iis:WebApplication Id="TestWebApplication" 
           Name="[VIRTUALDIR]" WebAppPool ="MyWebAppPool" /> 
     </iis:WebVirtualDir> 
     <!-- This is pretty important. If the CreateFolder isn't there the 
      WebVirtualDir won't get created as there's no files in this 
      component. 
      http://www.mail-archive.com/[email protected]/msg03483.html --> 
     <CreateFolder/> 
     </Component> 
    </DirectoryRef> 

    <!-- Because I want to show an example of installing a web site under an 
    existing web site, "Default Web Site", you have to keep this element 
    outside of a component. See the WiX documentation: 
    http://wix.sourceforge.net/manual-wix3/iis_xsd_website.htm. 
    Basically, outside a component means it's a locator/searching. Inside 
    a component means it's a creator. --> 
    <iis:WebSite Id='DefaultWebSite' 
      Description='Default Web Site'     
      Directory='INSTALLDIR'> 
    <!-- This element has to be here or WiX does not compile. It's ignored 
     in this case. --> 
    <iis:WebAddress Id="AllUnassigned" Port="80" /> 
    </iis:WebSite> 



<Feature Id='TestProductFeature' Title='Wix File Product Feature' Level='1'> 
    <ComponentRef Id="MyWebAppPoolCmp"/> 
    <ComponentRef Id='WebVirtualDirComponent' /> 
    <ComponentGroupRef Id='BASICWEBAPPFILES'/> 
    </Feature> 
    </Product> 
</Wix> 

回答

2

我可以通過將'installdir'的名字傳給'。'來解決這個問題。然後使用setdirectory動態設置installdir的名稱。編譯時,如果名稱以'。'的形式傳遞那麼編譯器會在平均時間忽略它,然後如果我們稍後傳遞installdir名稱,那麼將會設置該名稱。

的安裝目錄名稱應如下

 <Directory Id='INSTALLDIR' 
       Name='.'> 

的setdirectory傳遞如下傳遞。 [VIRTUALDIR]是安裝時從用戶接受的虛擬目錄的名稱。

<SetDirectory Id="INSTALLDIR" Sequence="execute" Value="[IISROOT][VIRTUALDIR]\">NOT Installed</SetDirectory>` 

希望它可以幫助別人

相關問題