2013-04-10 5 views
16

Sono consapevole di domande simili all'interno StackOverflow:Wix set di strumenti: creare la directory in disco di root (o disco di sistema c: ) e copiare i file all'interno

WIX:default directory in WixUI_InstallDir,

WIX installer root directory and versioning,

Is it possible to have two root directories in WIX ,

copy file to custom dir in another partition,

How to create a directory in wix?

tuttavia nessuno di questi mostra un codice semplice e immediato per creare una cartella all'interno della cartella C: \ (non codificata, ma dovrebbe essere il disco di root o il disco di sistema o qualunque cosa si chiami il disco che contiene la cartella di Windows) e per copiare i file al suo interno.

In altre parole, come può Wix creare una cartella C: \ MynewDir \ example.jar?

Ecco cosa ho provato:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- WiX installer MyProgram by Mark Seuffert --> 
<?define ProductVersion = "13.1.2.3"?> 
<?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111112"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" Name="MyProgram" Version="$(var.ProductVersion)" Manufacturer="COMPANY" Language="1033"> 
     <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package" /> 
     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLDIR" Name="MyProgram"> 
        <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> 
         <File Id="ApplicationFile1" Source="C:\Users\user\Desktop\myprogram.exe" /> 
        </Component> 
       </Directory> 
      </Directory> 

      <Directory Id="ANOTHERLOCATION" FileSource="C:\MynewDir"> 
      </Directory> 
     </Directory> 

     <DirectoryRef Id="ANOTHERLOCATION" FileSource="C:\MynewDir"> 
      <Component Id="ApplicationFiles2" Guid="12345678-1234-1234-1235-111111111111"> 
        <File Id="ApplicationFile2" Source="C:\Users\user\Desktop\InstallerFiles_13_4_9_3\myprogramLauncher.jar" /> 
        <CreateFolder /> 
      </Component> 
     </DirectoryRef> 

     <InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallValidate" /> 
     </InstallExecuteSequence> 
     <Feature Id="DefaultFeature" Level="1"> 
      <ComponentRef Id="ApplicationFiles2" /> 
      <ComponentRef Id="ApplicationFiles" /> 
     </Feature> 
    </Product> 
</Wix> 

EDIT 1: Yan Sklyarenko appena trovato quello che stavo cercando, questo è il WindowsVolume (non so come ho perso dentro http://msdn.microsoft.com/en-us/library/windows/desktop/aa370905%28v=vs.85%29.aspx#system_folder_properties Microsoft Document) .

Tuttavia, come sostituire FileSource = "C: \ MynewDir" con FileSource = "[WindowsVolume] MynewDir" ??? perché a quanto pare anche con WINDOWSVOLUME il volume risultante scelto è sempre D: \ nel mio computer che ha più spazio disponibile :(

EDIT 2 ho aggiornato il mio codice utilizzando secondo campione di Yan Sklyarenko (@@@@ newpart @@@ @ individua parti dove codice differisce), tuttavia comportamento è sempre lo stesso, l'installatore sceglie il disco con più spazio libero (D: \ nel mio caso) e non C: \ dove windows è ..

<?xml version="1.0" encoding="UTF-8"?> 
<!-- WiX installer MyProgram by Mark Seuffert --> 
<?define ProductVersion = "13.1.2.3"?> 
<?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111112"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" Name="MyProgram" Version="$(var.ProductVersion)" Manufacturer="COMPANY" Language="1033"> 
     <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package" /> 
     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLDIR" Name="MyProgram"> 
        <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222"> 
         <File Id="ApplicationFile1" Source="C:\Users\user\Desktop\myprogram.exe" /> 
        </Component> 
       </Directory> 
      </Directory> 

      <Directory Id="ANOTHERLOCATION" FileSource="C:\MynewDir"> 
      @@@@[email protected]@@@<Component Id="ApplicationFiles2" Guid="12345678-1234-1234-1235-111111111111"> 
        <File Id="ApplicationFile2" Source="C:\Users\user\Desktop\InstallerFiles_13_4_9_3\myprogramLauncher.jar" /> 
        <CreateFolder /> 
       </Component> 
      </Directory> 
     </Directory> 

     @@@@[email protected]@@@<SetDirectory Id="ANOTHERLOCATION" Value="[WINDOWSVOLUME]" /> 

     <InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallValidate" /> 
     </InstallExecuteSequence> 
     <Feature Id="DefaultFeature" Level="1"> 
      <ComponentRef Id="ApplicationFiles2" /> 
      <ComponentRef Id="ApplicationFiles" /> 
     </Feature> 
    </Product> 
</Wix> 

EDIT 3 L'ultimo frammento di codice sopra dovrebbe funzionare, tuttavia, modificare l'involucro di WINDOWSVOLUME in WindowsVolume come suggerito.

risposta

27

Ecco una soluzione completa di lavoro in base al codice semplificato (notare il commento nel codice):

<?define ProductVersion = "13.1.2.3"?> 
<?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111112"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" Name="MyProgram" 
     Version="$(var.ProductVersion)" Manufacturer="COMPANY" Language="1033"> 
    <Package InstallerVersion="200" Compressed="yes" /> 
    <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
      <Directory Id="INSTALLDIR" Name="MyProgram" /> 
      <Directory Id="ANOTHERLOCATION" /> 
     </Directory> 
    </Directory> 

    <!-- The casing of 'ANOTHERLOCATION' and 'WindowsVolume' is very important here. 
     Replace 'MyNewDir' with the correct name of the folder you want on 
     WindowsVolume. 
    --> 
    <SetDirectory Id="ANOTHERLOCATION" Value="[WindowsVolume]MyNewDir" /> 


    <Feature Id="DefaultFeature" Level="1"> 
     <Component Directory="INSTALLDIR"> 
     <File Id="ApplicationFile1" Source="C:\Users\user\Desktop\myprogram.exe" /> 
     </Component> 
     <Component Directory="ANOTHERLOCATION"> 
     <File Id="ApplicationFile2" Source="C:\Users\user\Desktop\InstallerFiles_13_4_9_3\myprogramLauncher.jar" /> 
     </Component> 
    </Feature> 
</Product> 
</Wix> 
+1

Non ho provato l'intero codice, tuttavia l'involucro di 'WindowsVolume' era il problema come accennavi correttamente .. Ora il mio frammento di codice funziona! Grazie – dendini

5

Ok, si può fare qualcosa di simile:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="WindowsVolume"> 
    <Directory Id="MyNewDirId" Name="MyNewDir"> 
     <Component Id="SampleComponent" Guid="..."> 
     <File Id="SampleFile" Source="..." KeyPath="yes" /> 
     </Component> 
    </Directory> 
    </Directory> 
</Directory> 

Questo installerà il file nella cartella MyNewDir sull'unità di Windows (C: nel mio caso). Tuttavia, si lamenterà che l'utilizzo di WindowsVolume in questo modo potrebbe avere effetti collaterali imprevisti.

Per soddisfare che la convalida, è possibile modificare il campione:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="MyNewDirId" Name="MyNewDir"> 
    <Component Id="SampleComponent" Guid="..."> 
     <File Id="SampleFile" Source="..." KeyPath="yes" /> 
    </Component> 
    </Directory> 
</Directory> 

<SetDirectory Id="MyNewDirId" Value="[WindowsVolume]MyNewDir" /> 

Questo sembra più un hack, ma il risultato è lo stesso. Ad essere onesti, non capisco quali potrebbero essere questi "effetti collaterali inaspettati". Forse, i guru di Windows Installer possono far luce su questo.

Spero che questo aiuti.

+0

ringraziamento, tuttavia si comporta lo stesso anche con i tuoi ultimo esempio modifiche (vedi il mio EDIT 2) .. Devo menzionare che sto provando sotto Windows 8 il triplo avvio con windows xp e windows 7. Quindi ogni disco ha una directory Windows all'interno comunque Windows è abbastanza intelligente da mettere come C: \ sempre il disco con la versione corrente di Windows , Dubito che questo potrebbe creare ulteriori problemi al programma di installazione di wix. – dendini

Problemi correlati