2011-03-03 18 views
8

Tengo dos preguntas sobre los directorios con el uso de fragmentos en Windows Installer XML.Wix Directory Problems

tengo este archivo fragmento de la 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> 

y tengo este archivo instalador 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> 

Hasta ahora.

Ahora cuando genero estos archivos en wixobj, el compilador muestra errores porque no se pueden encontrar los archivos. Los archivos están en un directorio llamado "Prueba". Y en el archivo se llama SourceDir.

Por una pequeña solución puedo copiar el directorio de prueba y llamarlo SourceDir ;-). Entonces mi configuración será creada.

  1. ¿Cómo puedo hacerlo sin un segundo directorio?
    • EDITAR: El problema está en.

Ahora instalo mi paquete. Pero haga lo que haga, los archivos se instalarán en C: \ Test.

Pero quiero que se instale en mi directorio de archivos de programa.

En muchos ejemplos puedo hacerlo, como en el archivo, pero tengo que saber las guías. Pero hacemos wix para obtener todos los archivos de un directorio, sin tener en nuestras manos.

  1. Entonces, ¿cómo instalar los archivos en el directorio de archivos de programa?

Respuesta

8

Eche un vistazo más de cerca al interruptor -dr de heat.exe. Puede poner allí la referencia de directorio necesaria. Por lo tanto, defina la estructura de su directorio en el archivo principal como lo hace ahora y proporcione el ID de directorio correcto al heat.exe.

ACTUALIZACIÓN:

bien, las siguientes obras para mí. La estructura principal del directorio:

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

La característica hace referencia a la ComponentGroup:

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

la heat.exe genera el siguiente fragmento:

<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> 

Y, por último, el comando de calor que genera necesaria la salida se ve así (muestra 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> 

Estos fragmentos contienen suficiente información para comprender cómo funciona todo. Juega con los interruptores heat.exe para descubrir la combinación que necesitas. ¡Buena suerte!

+0

Ahora tengo compilar la configuración con la opción de elegir el directorio. Pero lo mismo. Los archivos se instalarán en C: \ Test. tengo que decirle al archivo de configuración Wix: ' instalar Feature AQUÍ ' –

+0

investigar la primera lección del tutorial conocido: http://www.tramontana.co. hu/wix/lesson1.php y descarga la muestra ya hecha. Debería responder a sus preguntas sobre estructuras de directorios –

+0

Cuando conozco todos los componentes, guías y nombres, puedo escribirlos en el árbol del directorio. Pero tengo un segmento con todos los archivos, que se leerá en el Grupo de características (sobre ComponentGroupRef Id). ¿Cómo instalo este Grupo en los directorios? –

0

En caso de que las personas como yo sigan buscando aclaraciones: El <DirectoryRef Id="WebsiteFolder"> en el fragmento de calor es importante, es la referencia de dónde deben instalarse los archivos de fragmentos. Si tiene varios fragmentos y desea colocarlos en diferentes ubicaciones, DirectoryRef es la clave.

+2

¿Podría proporcionar un poco más de detalle? –