[wix-users] Preserving recursive directory structure during component copy
Rob Mensching
rob at firegiant.com
Tue Dec 31 08:17:35 PST 2019
Need to give them different File/@Ids. In WiX v3, File/@Id defaults to File/@Name. In WiX v4, it's smarter.
Short replies here. Complete answers here: https://www.firegiant.com/services/
-----Original Message-----
From: wix-users <wix-users-bounces at lists.wixtoolset.org> On Behalf Of Zac Harvey via wix-users
Sent: Tuesday, December 31, 2019 5:19 AM
To: Edwin Castro <egcastr at gmail.com>; Zac Harvey via wix-users <wix-users at lists.wixtoolset.org>
Cc: Zac Harvey <zharvey at pobox.com>
Subject: Re: [wix-users] Preserving recursive directory structure during component copy
Thanks so much Edwin, I think I'm close now, however this method does not seem to like it if there are multiple files with the same name, even if they live in two different subdirectories:
<Directory Id="Jre8Folder" Name="jre8">
<Directory Id="Jre8LibFolder" Name="lib"> <Directory Id="Jre8LibSecurityFolder" Name="security"> <Directory Id="Jre8LibSecurityPolicyFolder" Name="policy"> <Directory Id="Jre8LibSecurityPolicyLimitedFolder" Name="limited" /> <Directory Id="Jre8LibSecurityPolicyUnlimitedFolder" Name="unlimited" /> </Directory> </Directory> </Directory> </Directory>
<Component Id="Jre8LibSecurityPolicyUnlimitedLocal_policyJarComponent" Directory="Jre8LibSecurityPolicyUnlimitedFolder">
<File Source="jre8/lib/security/policy/unlimited/local_policy.jar" /> </Component> <Component Id="Jre8LibSecurityPolicyUnlimitedUs_export_policyJarComponent" Directory="Jre8LibSecurityPolicyUnlimitedFolder">
<File Source="jre8/lib/security/policy/unlimited/US_export_policy.jar" /> </Component> <Component Id="Jre8LibSecurityPolicyLimitedLocal_policyJarComponent" Directory="Jre8LibSecurityPolicyLimitedFolder">
<File Source="jre8/lib/security/policy/limited/local_policy.jar" /> </Component> <Component Id="Jre8LibSecurityPolicyLimitedUs_export_policyJarComponent" Directory="Jre8LibSecurityPolicyLimitedFolder">
<File Source="jre8/lib/security/policy/limited/US_export_policy.jar" /> </Component>
In the above WiX XML, when I build the solution in VS Community 2019, I get the following error:
Severity Code Description Project File Line Suppression State Suppression State Error Duplicate symbol 'File:local_policy.jar' found. This typically means that an Id is duplicated. Check to make sure all your identifiers of a given type (File, Component, Feature) are unique. my-app-setup C:\Users\MyUser\Source\Repos\my-app-setup\my-app-setup\my-app-setup.wxs 313
So it doesn't like the fact that a file named *local_policy.jar* lives inside two different subdirs (*limited* and *unlimited*)...any idea what the fix is here? (The build *also* complains about the other "duplicate" files such as *US_export_policy.jar* living in multiple subdirs as well; I'm just focusing on *local_policy.jar* as an example here.)
Thanks again so much!
Best,
Zac
On Mon, Dec 30, 2019, at 4:03 PM, Edwin Castro wrote:
> You need to author the entire directory structure and place the files in the desired directory:
>
> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory
> Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="MyApp">
> <Directory Id="TestoFolder" Name="testo"> <Directory Id="FizzFolder"
> Name="fizz"> <Directory Id="AbcFolder" Name="abc"> <Directory
> Id="DefFolder" Name="def"> <Directory Id="GhiFolder" Name="ghi" />
> </Directory> </Directory> </Directory> </Directory> </Directory>
> </Directory> </Directory>
>
> <Component Id="FooTxtComponent" Directory="TestoFolder"> <File
> Source="testo/foo.txt" /> </Component>
>
> <Component Id="AbbaComponent" Directory="GhiFolder"> <File
> Source="testo/fizz/abc/def/ghi/abba.txt" /> </Component>
>
> <Component Id="ExecutableComponent" Directory="INSTALLFOLDER"> <File
> Source="my-app.exe" /> </Component>
>
> --
> Edwin G. Castro
>
>
> On Mon, Dec 30, 2019 at 12:28 PM Zac Harvey via wix-users <wix-users at lists.wixtoolset.org> wrote:
>> Wix 3.11.2 and Visual Studio Community 2019 here. My project has the following directory structure:
>>
>> ...\Source\Repos\my-app-setup\
>> my-app-setup\
>> bin\
>> obj\
>> testo\
>> fizz\
>> abc\
>> def\
>> ghi\
>> abba.txt
>> buzz\
>> bar.txt
>> foo.txt
>> my-app.exe
>> my-app-setup.wixproj
>> my-app-setup.wxs
>> my-app-setup.sln
>>
>>
>> Where the *my-app-setup.wxs* file is as follows:
>>
>> <?xml version="1.0" encoding="UTF-8"?> <Wix
>> xmlns="http://schemas.microsoft.com/wix/2006/wi">
>> <Product Id="*" Name="MyApp" Language="1033" Version="1.0.0.0"
>> Manufacturer="MyCompany"
>> UpgradeCode="1e540666-dda2-4cbe-91b7-ac9525d96c86">
>> <Package Description="MyApp tool" Compressed="yes" />
>>
>> <MediaTemplate EmbedCab="yes"/>
>>
>> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory
>> Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="MyApp"
>> /> </Directory>
>>
>> <Directory Id="DesktopFolder" Name="Desktop"> <Component
>> Id="ApplicationShortcutDesktop" Guid="*"> <Shortcut
>> Id="ApplicationDesktopShortcut"
>> Name="MyApp"
>> Description="Shortcut for MyApp"
>> Target="[INSTALLFOLDER]my-app.exe"
>> WorkingDirectory="INSTALLFOLDER"/>
>> <RemoveFolder Id="DesktopFolder" On="uninstall"/> <RegistryValue
>> Root="HKCU"
>> Key="Software/MyApp"
>> Name="installed"
>> Type="integer"
>> Value="1"
>> KeyPath="yes"/>
>> </Component>
>> </Directory>
>> </Directory>
>>
>> <Component Id="FooTxtComponent" Directory="INSTALLFOLDER"> <File
>> Source="testo/foo.txt" /> </Component>
>>
>> <Component Id="AbbaComponent" Directory="INSTALLFOLDER"> <File
>> Source="testo/fizz/abc/def/ghi/abba.txt" /> </Component>
>>
>> <Component Id="ExecutableComponent" Directory="INSTALLFOLDER">
>> <File Source="my-app.exe" /> </Component>
>>
>> <Feature Id="MainFeature" Title="MyApp" Level="1"> <ComponentRef
>> Id="FooTxtComponent" /> <ComponentRef Id="AbbaComponent" />
>> <ComponentRef Id="ExecutableComponent" />
>>
>> <ComponentRef Id="ApplicationShortcutDesktop" /> </Feature>
>> </Product> </Wix>
>>
>> So it basically just copies a bunch of files from the project into the *C:\Program Files (x86)\MyApp* directory and then creates a shortcut (to the EXE) on the desktop. Simple stuff.
>>
>> When I build this and run the MSI the resulting *C:\Program Files (x86)\MyApp* directory looks like this:
>>
>> C:\Program Files (x86)\
>> MyApp\
>> foo.txt
>> abba.txt
>> my-app.exe
>>
>> So WiX is just plucking the files I specified and dropping them into the *MyApp* directory, at the same level as the EXE file. I *don't* want this; I want to preserve the same recursive directory structure as what exists in my VS project. So instead of the above I would like the WiX MSI to generate:
>>
>> C:\Program Files (x86)\
>> MyApp\
>> testo\
>> fizz\
>> abc\
>> def\
>> ghi\
>> abba.txt
>> foo.txt
>> my-app.exe
>>
>> *What is the simplest way to accomplish this?*
>>
>> Thanks!
>>
>> ____________________________________________________________________
>> WiX Toolset Users Mailing List provided by FireGiant
>> http://www.firegiant.com/
____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/
More information about the wix-users
mailing list