2010-09-13 70 views
5

所以我試圖安裝一個web應用程序,我偶然發現了這個問題:Using WiX to create an IIS virtual directory。當我嘗試將其適用於我自己的應用程序時,出現錯誤: 用Wix安裝一個web應用程序

W:\projectlocation\IssInstallationComponents.wxs(6,0): error LGHT0204: ICE18: KeyPath for Component: 'SiteInstallationComponent' is Directory: 'WEBDIRECTORY'. The Directory/Component pair must be listed in the CreateFolders table.

我一直在試圖弄清楚這一點。這裏是我在受影響的文件中有:

<?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是錯誤的,我將它從上面的示例中刪除,以便它不會被Google索引,並且會被某個人用來找出類似的東西。在我的代碼中,我有一個正確的GUID。我還將產品名稱更改爲「產品」以避免任何類型的IP問題。

關於我需要做什麼來獲得此代碼的任何想法?

+0

只是一張紙條,上面GUID值:'的Guid = 「PUT-GUID-HERE」'是有效的,特別是例如 – Paddy 2012-05-01 16:04:10

回答

12

嘆息

好吧,我所經歷的interwebs挖掘,發現了以下主題:http://www.mail-archive.com/[email protected]/msg03483.html

基本上我需要改變我的組件,以便它看起來像這樣:

<Component Id="SiteInstallationComponent" Guid="MY GUID"> 
     <CreateFolder /> 
     <iis:WebVirtualDir Id="ProductVirtualDirectory" Alias="[PRODUCTVERSION]" Directory="WEBDIRECTORY" WebSite="DefaultWebSite"/> 
    </Component> 

我喜歡Wix,但有時它會讓我發瘋。

+0

分享感受:-) – kroonwijk 2012-06-26 14:00:48

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和標題,我們傳遞給安裝兩個屬性)