web-dev-qa-db-ja.com

Wixツールセット:ルートディスク(システムディスクまたはc:\)にディレクトリを作成し、その中にファイルをコピーします

私はstackoverflow内の同様の質問を知っています:

WIX:WixUI_InstallDirのデフォルトディレクトリ

WIXインストーラーのルートディレクトリとバージョン管理

WIXに2つのルートディレクトリを持つことは可能ですか

ファイルを別のパーティションのカスタムディレクトリにコピー

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>

編集1:Yan Sklyarenkoは、私が探していたものを見つけました。それがWindowsVolumeです(内部でどのように見逃したのかわかりません http ://msdn.Microsoft.com/en-us/library/windows/desktop/aa370905%28v=vs.85%29.aspx#system_folder_properties Microsoftドキュメント)。

ただし、FileSource = "C:\ MynewDir"をFileSource = "[WindowsVolume] MynewDir"に置き換えるにはどうすればよいですか?どうやらWINDOWSVOLUMEを使用しても、選択される結果のボリュームは、より多くの使用可能なスペースがある私のコンピューターでは常にD:\であるためです:(

EDIT 2Yan Sklyarenkoの2番目のサンプルを使用してコードを更新しました(@@@@ newpart @@@@はコードが異なる部分を識別します)が、動作はまだです同じように、インストーラーは、WindowsがあるC:\ではなく、より多くの空き領域(私の場合はD:\)のあるディスクを選択します。

<?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">
             @@@@newpart@@@@<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>

        @@@@newpart@@@@<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に変更します。

17
dendini

簡略化されたコードに基づく完全に機能するソリューションは次のとおりです(コード内のコメントに注意してください)。

<?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>
29
Rob Mensching

わかりました、あなたはこのようなことをすることができます:

<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インストーラの達人はこれにいくらかの光を当てることができます。

お役に立てれば。

5
Yan Sklyarenko