所以我正在尝试安装一个Web应用程序,我偶然发现了这个问题:Using WiX to create an IIS virtual directory。当我尝试为我自己的应用程序调整它时,我收到一个错误:
W:\ projectlocation \ IssInstallationComponents.wxs(6,0):错误LGHT0204:ICE18:组件的KeyPath:'SiteInstallationComponent'是目录:'WEBDIRECTORY'。目录/组件对必须在CreateFolders表中列出。
我一直试图解决这个问题。这是我在受影响的文件中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<Fragment>
<DirectoryRef Id="WEBDIRECTORY">
<Component Id="SiteInstallationComponent" Guid="MY GUID">
<iis:WebVirtualDir Id="ProductVirtualDirectory" Alias="[PRODUCTVERSION]" Directory="WEBDIRECTORY" WebSite="DefaultWebSite"/>
</Component>
</DirectoryRef>
<iis:WebSite Id='DefaultWebSite' Description='Default Web Site' Directory='WEBDIRECTORY'>
<iis:WebAddress Id="AllUnassigned" Port="80" />
</iis:WebSite>
</Fragment>
</Wix>
关于我的例子的一些注释。首先,我知道GUID是错误的,我从上面的示例中删除它,以便它不会被谷歌索引并被想要找出类似内容的人重用。在我的代码中,我有一个正确的GUID。我还将产品名称更改为“产品”以避免任何类型的IP问题。
有关如何使此代码正常工作的任何想法?
答案 0 :(得分:12)
叹息
好的,我开始挖掘互联网并找到以下主题:http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg03483.html
基本上我需要更改我的组件,使其看起来像这样:
<Component Id="SiteInstallationComponent" Guid="MY GUID">
<CreateFolder />
<iis:WebVirtualDir Id="ProductVirtualDirectory" Alias="[PRODUCTVERSION]" Directory="WEBDIRECTORY" WebSite="DefaultWebSite"/>
</Component>
我爱Wix,但有时它会让我发疯。
答案 1 :(得分:2)
以为我会为此添加一些内容。在我的情况下,我需要修改配置文件作为具有XmlConfig操作的补丁的一部分。我遇到了原来的问题,并试图通过在那里粘贴一个CreateFolder元素来解决它。但是这有一个障碍。如果您的组件是修补程序的一部分,则在其中放置CreateFolder条目会使其成为not uninstallable。这意味着你无法回滚补丁。
我最终做的是为组件创建不同的KeyPath。我给了它一个注册表项作为KeyPath,它不再困扰我关于CreateFolder条目。这意味着它将在安装和卸载时执行您想要的任何操作,并使用您提供的注册表项来跟踪组件是否已安装。
<RegistryKey Root="HKLM" Key="[REGISTRYKEY]\Settings\[TITLE]" Action="createAndRemoveOnUninstall">
<RegistryValue Action="write" Type="integer" Name="MACHINEMEMORYLIMIT" Value="1" KeyPath="yes"/>
</RegistryKey>
(在这种情况下,REGISTRYKEY和TITLE是我们传递给安装程序的两个属性)