2013-04-10 4 views
16

Jestem świadomy podobnych pytań wewnątrz stackoverflow:toolset Wix: utworzyć katalog w root disk (dysk systemowy lub C: ) i kopiowanie plików wewnątrz

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?

jednak żadna z nich nie pokazuje prostego i natychmiastowego kodu do utworzenia folderu wewnątrz folderu C: \ (nie jest to kodowanie na sztywno, ale powinno być dyskiem głównym lub dyskiem systemowym lub czymkolwiek, co można nazwać dyskiem zawierającym folder Windows) i kopiować pliki wewnątrz niego.

Innymi słowy, w jaki sposób Wix może utworzyć folder C: \ MynewDir \ example.jar?

Oto, co starałem:

<?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 prostu znaleźć to, czego szukasz, to jest WindowsVolume (nie wiem jak brakowało mi go wewnątrz http://msdn.microsoft.com/en-us/library/windows/desktop/aa370905%28v=vs.85%29.aspx#system_folder_properties microsoft dokumentu) .

Jak jednak zastąpić FileSource = "C: \ MynewDir" z FileSource = "[WindowsVolume] MynewDir" ??? bo podobno nawet z WINDOWSVOLUME otrzymaną objętość wybrany jest zawsze D: \ w moim komputerze, który ma więcej wolnego miejsca :(

EDIT 2 zaktualizowałem mojego kodu przy użyciu drugą próbkę Yan Sklyarenko'S (@@@@ nowapart @@@ @ identyfikuje części gdzie kod różni), ale zachowanie jest wciąż ten sam instalator wybiera dysk z większą ilością wolnego miejsca (D: \ w moim przypadku), a nie C: \ gdzie windows jest ..

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

EDYTOWANIE 3 Ostatni fragment kodu powyżej powinien działać, ale zmień obudowę WINDOWSVOLUME na WindowsVolume zgodnie z sugestią.

Odpowiedz

27

Powyżej znajduje się pełna roztwór roboczy oparty na kodzie uproszczonej (zauważyć komentarz w kodzie):

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

Nie wypróbowałem całego twojego kodu Jednak obudowa "WindowsVolume" była problemem, ponieważ prawidłowo zasugerowałeś .. Teraz mój fragment kodu działa! Dziękuję Ci – dendini

5

Ok, można zrobić coś takiego:

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

Będzie to zainstalować plik do folderu na dysku MyNewDir Windows (C: w moim przypadku). Jednak będzie narzekać, że używanie w ten sposób WindowsVolume może powodować nieoczekiwane efekty uboczne.

Aby spełnić ten walidacji można zmienić próbkę do:

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

To wygląda bardziej jak hack, ale wynik jest taki sam. Szczerze mówiąc, nie rozumiem, jakie mogą być te "nieoczekiwane efekty uboczne". Może, guru Windows Installer może rzucić trochę światła na to.

Mam nadzieję, że to pomoże.

+0

dziękuję, jednak zachowuje się tak samo również swoim ostatnim przykładzie zmian (patrz moja EDIT 2) .. Muszę wspomnieć, że próbuję pod systemem Windows 8 potrójnego rozruchu z Windows XP i Windows 7. Więc każdy dysk ma katalog Windows wewnątrz jednak Windows jest wystarczająco inteligentny, aby umieścić jako C: \ zawsze dysk z aktualnie uruchomioną wersją systemu Windows , Wątpię, że może to spowodować dalszy problem dla instalatora wix. – dendini

Powiązane problemy