2013-04-10 2 views
16

Ich bin mir dessen bewusst ähnliche Fragen innerhalb Stackoverflow:Wix Toolset: Verzeichnis erstellen in Rootdisk (Systemplatte oder c: ) und Kopieren von Dateien innerhalb

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?

aber keine von ihnen zeigt einen einfachen und sofortigen Code zum Erstellen eines Ordners im Ordner C: \ (nicht fest codiert, sollte aber die Root-Festplatte oder Systemdiskette oder was auch immer Sie die Festplatte nennen, die den Windows-Ordner enthält) und um Dateien darin zu kopieren.

Mit anderen Worten, wie kann Wix einen Ordner C: \ MynewDir \ example.jar erstellen?

Hier ist, was ich versucht:

<?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 gefunden, was ich suchte, das ist die WindowsVolume (ich weiß nicht, wie ich es in http://msdn.microsoft.com/en-us/library/windows/desktop/aa370905%28v=vs.85%29.aspx#system_folder_properties Microsoft Dokument verpasst) .

Wie aber ersetze ich FileSource = "C: \ MynewDir" mit FileSource = "[WindowsVolume] MynewDir" ??? weil offenbar auch bei WINDOWSVOLUME gewählt die resultierende Lautstärke ist immer D: \ in meinem Computer, der hat mehr verfügbaren Raum :(

EDIT 2 ich meinen Code aktualisiert mit Yan Sklyarenko zweite Probe (@@@@ NEWPART @@@ @ identifiziert Teile, in denen Code unterscheidet), aber das Verhalten immer noch das gleiche ist, wählt das Installationsprogramm die Festplatte mit mehr freien Speicherplatz (D: \ in meinem Fall) und nicht C: \ wo Fenster sind ..

<?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 Das letzte obige Code-Snippet sollte funktionieren, ändern Sie jedoch das Gehäuse von WINDOWSVOLUME zu WindowsVolume, wie vorgeschlagen

Antwort

27

ist die komplette Arbeitslösung auf Ihrem Code vereinfacht (man beachte den Kommentar im Code) basiert:

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

Ich habe nicht versucht, den ganzen Code aber Das Gehäuse von 'WindowsVolume' war das Problem, wie Sie richtig angedeutet .. Jetzt funktioniert mein Code-Snippet! Vielen Dank – dendini

5

Ok, können Sie etwas tun:

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

Dies wird die Datei in den Ordner MyNewDir Installation auf Windows-Laufwerk (C: in meinem Fall). Allerdings wird es sich beschweren, dass die Verwendung von WindowsVolume auf diese Weise unerwartete Nebenwirkungen haben kann.

dass die Gültigkeitsprüfung erfüllen, können Sie die Probe ändern können:

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

wie ein Hack Das sieht mehr, aber das Ergebnis ist das gleiche. Um ehrlich zu sein, ich verstehe nicht, was diese "unerwarteten Nebenwirkungen" sein könnten. Vielleicht können Windows Installer-Gurus etwas Licht ins Dunkel bringen.

Hoffe, das hilft.

+0

danke, aber es ist das gleiche auch mit dem letzten Beispiel Änderungen verhält (mein EDIT 2 sehen) .. Ich muss erwähnen, ich versuche unter Windows 8 Triple-Boot mit Windows XP und Windows 7. So hat jede Festplatte ein Windows-Verzeichnis innerhalb Windows ist aber schlau genug, um C: \ immer die Festplatte mit der derzeit laufenden Version von Windows Ich bezweifle, dass dies zu einem weiteren Problem für den Wix-Installer führen könnte. – dendini

Verwandte Themen