2013-04-10 8 views
16

内のファイルをコピーします。ルートディスクにディレクトリを作成し、のWiXツールセット:(:システムディスクまたはc)と私はstackoverflowの内部に同様の質問を知ってる

WIX installer root directory and versioningを、

WIX:default directory in WixUI_InstallDir

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?

しかし、それらのどれも、C:\フォルダ内にフォルダを作成する簡単で即座のコードを示していません(ハードコードされていませんが、ルートディスクまたはシステムディスクまたはWindowsフォルダを含むディスクと呼ばれるものでなければなりません)その中のファイルをコピーすることができます。

つまり、WixはどのようにしてC:\ MynewDir \ example.jarフォルダを作成できますか?ここで

は、私が試したものです:

<?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: ヤンSklyarenkoはちょうど私が探していたものを見つけ、それはWindowsVolume(私はhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa370905%28v=vs.85%29.aspx#system_folder_propertiesマイクロソフトドキュメント内にそれを逃したのか分からない)です。

しかし、FileSource = "C:\ MynewDir"をFileSource = "[WindowsVolume] MynewDir"に置き換えるにはどうすればよいですか?私は(@@@@ newpart @@@ヤンSklyarenkoの第二のサンプルを使用して自分のコードを更新し、より利用可能なスペースを持っている私のコンピュータで\ :(

EDIT 2:選択したボリュームは常にDで明らかにさえWINDOWSVOLUMEであるため@コードが異なるパーツ)、しかし行動はインストーラがより多くの空き領域(とディスクを選択し、まだ同じであるが識別D:\私の場合は)ありませんC:\ 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上記の最後のコードスニペットは、しかし、提案されているようにWINDOWSVOLUMEのケーシングをWindowsVolumeに変更する必要があります。

答えて

27

は(コード内のコメントに注目してください)に簡略化してコードに基づいて、完全な実用的なソリューションです:

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

私はあなたのコード全体を試しませんでしたが、あなたが正しく示唆したように、 'WindowsVolume'のケーシングが問題でした..今、私のコードスニペットが機能します!ありがとうございました – dendini

5

[OK]を、あなたはこのような何かを行うことができます。

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

これは、WindowsドライブのMyNewDirフォルダにファイルをインストールします(C:私の場合)。 しかし、このような方法でWindowsVolumeを使用すると予期しない副作用が発生する可能性があると不平を言います。その妥当性を満たすために

、あなたがサンプルを変更することができます。

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

これは、より多くのハックのように見えますが、結果は同じです。 正直言って、私はこれらの「予期しない副作用」が何であるか理解していません。たぶん、Windowsインストーラの達人は、これについていくつかの光を当てることができます。

これが役に立ちます。

ここ
+0

はあなたに感謝、しかし、それは(私のEDIT 2を参照してください)最後の例の変更でも同じ動作をします私はウィンドウズXPとWindows 7で8トリプルブートを試していると言わなければならない。各ディスクにはWindowsディレクトリがあるが、Windowsは現在実行中のバージョンのWindows私はこれがwixインストーラーにさらなる問題を引き起こすかもしれないとは思わない。 – dendini