2011-03-03 96 views
8

我有两个关于在Windows Installer XML中使用片段的问题。Wix目录问题

我从heat.exe这个片段文件:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <DirectoryRef Id="TARGETDIR"> 
      <Directory Id="dir08A07F5561FBEB6B9772467C730F6445" Name="Test" /> 
     </DirectoryRef> 
    </Fragment> 
    <Fragment> 
     <ComponentGroup Id="InstallationFiles"> 
      <Component Id="cmp071F7F8F6B6027C8D2841272FE526A2B" Directory="dir08A07F5561FBEB6B9772467C730F6445" Guid="{CCCB70AC-29F5-4DAA-B03E-1A2266649AB6}"> 
       <File Id="fil63087E96FFB31F9E39B642CE8914F48B" KeyPath="yes" Source="SourceDir\dmedv.jpg" /> 
      </Component> 
      <Component Id="cmpAE6CBEDA75641CF25BA9996AEB74A0DE" Directory="dir08A07F5561FBEB6B9772467C730F6445" Guid="{F5DABCAB-95D1-4197-A49F-E5F052A8E7EF}"> 
       <File Id="filD27F2F6B26F5C14563865FE6C2AD5D50" KeyPath="yes" Source="SourceDir\Files.txt" /> 
      </Component> 
      <Component Id="cmp25C5EADB5C0A9E779D20EC7B77BD42B0" Directory="dir08A07F5561FBEB6B9772467C730F6445" Guid="{E301B04A-6EA5-496B-A58A-8898110BE57C}"> 
       <File Id="fil7C91C48D9AA0F2FE0EB37A21F108037F" KeyPath="yes" Source="SourceDir\readme.txt" /> 
      </Component> 
      <Component Id="cmpD387AB4B40EDF14BF271ADDA7B71D2B7" Directory="dir08A07F5561FBEB6B9772467C730F6445" Guid="{6AF61DF4-32D0-4E7C-95B8-1DB9E7409029}"> 
       <File Id="fil966691BA382AFC9343430FE162643432" KeyPath="yes" Source="SourceDir\readme1.txt" /> 
      </Component> 
      <Component Id="cmpB86212407C1BEA12838C8C7B20495E9F" Directory="dir08A07F5561FBEB6B9772467C730F6445" Guid="{921E971E-E224-464C-9FBC-FBC5F78B3E5B}"> 
       <File Id="fil61CD8EF43EA29DF58454E9A19F8C1EF9" KeyPath="yes" Source="SourceDir\readme2.txt" /> 
      </Component> 
      <Component Id="cmpE4143B48FF854AE84F6054D4636FDE81" Directory="dir0ADF7E89B935DD39670130B4DC1D670E" Guid="{6F248718-93DD-4850-A18E-BD7079F738D5}"> 
       <File Id="fil03847B355B6AADE5E4E04D143C92BC67" KeyPath="yes" Source="SourceDir\Test2\dmedv2.jpg" /> 
      </Component> 
     </ComponentGroup> 
    </Fragment> 
    <Fragment> 
     <DirectoryRef Id="dir08A07F5561FBEB6B9772467C730F6445" /> 
    </Fragment> 
    <Fragment> 
     <DirectoryRef Id="dir0ADF7E89B935DD39670130B4DC1D670E" /> 
    </Fragment> 
    <Fragment> 
     <DirectoryRef Id="dir08A07F5561FBEB6B9772467C730F6445"> 
      <Directory Id="dir0ADF7E89B935DD39670130B4DC1D670E" Name="Test2" /> 
     </DirectoryRef> 
    </Fragment> 
</Wix> 

,我有这个WiX的安装程序文件:

<?xml version='1.0' encoding='windows-1252'?> 

<?define ProductVersion="1.0.0.0"?> 
<?define ProductName="DMServices Installer"?> 
<?define Manufacturer="DM EDV- und Bürosysteme GmbH"?> 

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:iis='http://schemas.microsoft.com/wix/IIsExtension'> 
    <Product Name="$(var.ProductName)" Id='BB7FBBE4-0A25-4cc7-A39C-AC916B665220' UpgradeCode='8A5311DE-A125-418f-B0E1-5A30B9C667BD' 
    Language='1033' Codepage='1252' Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)"> 

    <Package Id='*' Keywords='Installer' 
     Description="DMService Installer Setup" 
     Manufacturer='DM EDV- und Bürosysteme GmbH' 
     InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' /> 

    <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" /> 
    <Property Id='DiskPrompt' Value="the man" /> 

    <PropertyRef Id="NETFRAMEWORK35"/> 
    <Condition Message='This setup requires the .NET Framework 3.5.'> 
     <![CDATA[Installed OR (NETFRAMEWORK35)]]> 
    </Condition> 

    <Directory Id='TARGETDIR' Name='SourceDir'> 
     <Directory Id='ProgramFilesFolder'> 
     <Directory Id='DM' Name='DM EDV'> 
      <Directory Id='INSTALLDIR' Name='DMServices'> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 

<Feature Id='InstallationFiles' Title='InstallationFiles' Level='1'> 
     <ComponentGroupRef Id='InstallationFiles' /> 
    </Feature> 

    </Product> 
</Wix> 

至今。

现在,当我生成这个文件到wixobj,编译器显示,因为这些文件不能被发现的错误。这些文件位于名为“Test”的目录中。在文件中它被命名为SourceDir。

对于一个可爱的解决办法,我可以复制的测试目录,并把它SourceDir ;-)。所以我的安装程序将被创建。

  1. 我怎样才能做到这一点没有第二个目录?
    • 编辑:问题是做

现在我安装我的包。但无论我做什么,这些文件都将安装到C:\ Test。

但我希望它安装在我的Program Files目录。

在许多例子中我能做到这一点,就像在文件中,但我知道的GUID。 但是,我们确实需要从一个目录中获取所有文件,而无需执行任何操作。

  1. 那么如何将文件安装到程序文件目录?

回答

8

仔细看-dr开关heat.exe。你可以在那里放置必要的目录参考。因此,请像现在这样在主文件中定义目录结构,并向heat.exe提供正确的目录ID。

更新:

好的,以下适用于我。主目录结构:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="INSTALLLOCATION" Name="My folder"> 
     <Directory Id="WebsiteFolder" Name="Website"> 
     ... 
     </Directory> 
    </Directory> 
    </Directory> 

特征基准的ComponentGroup:

<Feature Id="ProductFeature" Title="!(loc.ProductFeature.Title)" Level="100"> 
    ... 
    <ComponentGroupRef Id="WebsiteFolderComponentGroup"/> 
    ... 
    </Feature> 

的heat.exe产生下面的片段:

<Fragment> 
     <DirectoryRef Id="WebsiteFolder"> 
      <Component Id="cmp1" Guid="GUID-GOES-HERE"> 
       <File Id="fil1" KeyPath="yes" Source="$(var.WebsiteFolderSource)\Default.aspx" /> 
      </Component> 
      <Component Id="cmp2" Guid="GUID-GOES-HERE"> 
       <File Id="fil2" KeyPath="yes" Source="$(var.WebsiteFolderSource)\default.css" /> 
      </Component> 
      <Directory Id="dir1" Name="App_Browsers"> 
       <Component Id="cmp3" Guid="GUID-GOES-HERE"> 
        <File Id="fil3" KeyPath="yes" Source="$(var.WebsiteFolderSource)\App_Browsers\Form.browser" /> 
       </Component> 
      </Directory> 
      <Directory Id="App_Config" Name="App_Config"> 
       <Component Id="cmp4" Guid="GUID-GOES-HERE"> 
        <File Id="fil4" KeyPath="yes" Source="$(var.WebsiteFolderSource)\App_Config\ConnectionStrings.config" /> 
       </Component> 
      </Directory> 
      <Directory Id="bin" Name="bin"> 
       <Component Id="cmp5" Guid="GUID-GOES-HERE"> 
        <File Id="fil5" KeyPath="yes" Source="$(var.WebsiteFolderSource)\bin\MySystem.Web.UI.dll" /> 
       </Component> 
       <Component Id="cmp6" Guid="GUID-GOES-HERE"> 
        <File Id="fil6" KeyPath="yes" Source="$(var.WebsiteFolderSource)\bin\Another.dll" /> 
       </Component> 
       ... 
      </Directory> 
     ... 
     </Directory> 

... 

     <ComponentGroup Id="WebsiteFolderComponentGroup"> 
      <ComponentRef Id="cmp1" /> 
      <ComponentRef Id="cmp2" /> 
      <ComponentRef Id="cmp3" /> 
      <ComponentRef Id="cmp4" /> 
      ... 
     </ComponentGroup> 

最后,其产生所需的热量命令输出看起来像这样(Nant样本):

<exec program="heat.exe" verbose="true" basedir="${paths.source}"> 
    <arg line='dir "${paths.dist.website}"'/><!-- Notice the quotes inside the attributes --> 
    <arg line='-srd'/> 
    <arg line='-dr WebsiteFolder'/> 
    <arg line='-cg WebsiteFolderComponentGroup'/> 
    <arg line='-out "${paths.harvest}\website.wxs"'/> 
    <arg line='-ke -sfrag -scom -sreg -gg'/> 
    <arg line='-var var.WebsiteFolderSource'/> 
    </exec> 

这些片段包含足够的信息来了解它是如何工作的。使用heat.exe开关来查找您需要的组合。祝你好运!

+0

现在我已经建立了目录选择的设置。但是一样。这些文件将被安装到C:\ Test。 我要告诉WiX的安装文件: '<目录ID = 'TARGETDIR' 名称= 'SourceDir'> <目录ID = 'ProgramFilesFolder'> <目录ID = 'DM' 名称= 'DM EDV' > <目录ID = 'INSTALLDIR' 名称= 'DMServices'> 安装功能该处 ' – 2011-03-03 12:08:21

+0

调查公知的教程的第一课:http://www.tramontana.co。 hu/wix/lesson1.php并下载现成的示例。它应该回答你关于目录结构的问题 – 2011-03-03 12:59:10

+0

当我知道所有的组件Guids和Names,然后我可以将它写入目录树。但是我得到了一个包含所有文件的段,这些段将在Feature Group中读取(通过ComponentGroupRef Id)。我如何将这个组安装到目录中? – 2011-03-04 07:21:32

0

如果像我这样的人仍在寻求澄清:热片段中的<DirectoryRef Id="WebsiteFolder">是重要的,它是应该在哪里安装片段文件的参考。如果您有多个片段并希望将它放在不同的位置,DirectoryRef是关键。

+2

你能否提供更多的细节? – 2013-10-21 21:01:50