gpt4 book ai didi

iis - 使用 WiX IIS 安装程序中的虚拟目录的名称覆盖引用目录的名称

转载 作者:行者123 更新时间:2023-12-02 14:50:34 26 4
gpt4 key购买 nike

我使用 wix 为网站创建了一个安装程序。在安装期间,用户接受虚拟目录的名称。如果用户提供的名称与引用目录名称不同,则虚拟目录和引用目录都会在 IIS 中列出,这是我不希望的。如何通过在安装过程中用虚拟目录的用户给定名称覆盖引用目录的名称来避免这种情况。所有帮助表示赞赏。下面是我使用的主要 wxs 文件的代码。

谢谢。

 <?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/wix-users@lists.sourceforge.net/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>

最佳答案

我可以通过使用“.”传递 installdir 的名称来解决此问题然后使用 setdirectory 动态设置安装目录的名称。编译时,如果名称作为“.”传递那么编译器会同时忽略它,然后如果我们稍后传递 installdir 名称,那么该名称将被设置。

安装目录名称应按如下方式传递

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

setdirectory 的传递方式如下。 [VIRTUALDIR]是安装时用户接受的虚拟目录的名称。

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

希望对大家有帮助

关于iis - 使用 WiX IIS 安装程序中的虚拟目录的名称覆盖引用目录的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com