2013-11-21 68 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>` 

希望它可以帮助别人

相关问题