JavaFX eclipse configures deployed package using wix

I am using Eclipse 4.5.2 to deploy a JavaFX application (JDK 1.8). I want to change IniFile during installation. An Ant task or JavaFX deployment generates a dynamic wxi file that will be included in the wxs file. When I configure my wxs file, it does nothing during installation.

<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <Product Id="ca010b32-9fce-45aa-83f3-3a38f0903b26" Name="test" Language="1033" Version="1.00" Manufacturer="Test GmbH" UpgradeCode="ab0ba5d0-6760-4c00-991d-75816e2409a7"> <Package Description="test" Comments="None" InstallerVersion="200" Compressed="yes" InstallScope="perUser" Platform="x86"/> <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" /> <!-- Check some requirements ONLY on "install", but not on modify or uninstall. --> <Property Id="JAVA_CURRENT_VERSION"> <RegistrySearch Id="JRE_CURRENT_VERSION_REGSEARCH" Root="HKLM" Key="SOFTWARE\JavaSoft\Java Runtime Environment" Name="CurrentVersion" Type="raw" Win64="no" /> </Property> <Condition Message="Java Runtime Environment (32 Bit) is not installed. Please install Oracle JRE."><![CDATA[(Installed OR JAVA_CURRENT_VERSION)]]></Condition> <!-- We use RemoveFolderEx to ensure application folder is fully removed on uninstall. Including files created outside of MSI after application had been installed (eg on AU or user state). Hovewer, RemoveFolderEx is only available in WiX 3.6, we will comment it out if we running older WiX. RemoveFolderEx requires that we "remember" the path for uninstall. Read the path value and set the APPLICATIONFOLDER property with the value. --> <Property Id="APPLICATIONFOLDER"> <RegistrySearch Key="SOFTWARE\test GmbH\test" Root="HKCU" Type="raw" Id="APPLICATIONFOLDER_REGSEARCH" Name="Path" /> </Property> <DirectoryRef Id="APPLICATIONFOLDER"> <Component Id="CleanupMainApplicationFolder" Guid="*" Win64="no"> <RemoveRegistryKey Id="RemoveValidationRegistryKeys" Action="removeOnUninstall" Root="HKCU" Key="Software\test GmbH"/> <RegistryValue Root="HKCU" Key="SOFTWARE\test GmbH\test" Name="Path" Type="string" Value="[APPLICATIONFOLDER]" KeyPath="yes" /> <!-- We need to use APPLICATIONFOLDER variable here or RemoveFolderEx will not remove on "install". But only if WiX 3.6 is used. --> <util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER" /> </Component> </DirectoryRef> <?include bundle.wxi ?> <UI/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Name="AppData" Id="LocalAppDataFolder"> <Directory Id="APPLICATIONFOLDER" Name="test"> <Directory Id="dirid6" Name="app"> <Component Id="comp1" DiskId="1" Guid="ec2f648f-05ec-4deb-bf65-b938e40209f4"> <IniFile Id="ConfigFile" Action="removeLine" Directory="INSTALLDIR" Name="test.cfg" Section="Application" Key="app.runtime" /> </Component> </Directory> </Directory> </Directory> </Directory> <Icon Id="DesktopIcon.exe" SourceFile="test.ico" /> <Icon Id="StartMenuIcon.exe" SourceFile="test.ico" /> </Product> </Wix> 

As you can see, there is a <?include bundle.wxi ?> . This will use the dynamically generated bundle.wxi file.

I tried to do this with wix inifile => <IniFile Id="ConfigFile" Action="removeLine" Directory="INSTALLDIR" Name="test.cfg" Section="Application" Key="app.runtime" /> My problem in how can I change IniFile?

When I look at the MSI file, it does not contain any IniFile settings.

But nothing changed during the installation. The msi log file does not indicate any change to any change.

What am I doing wrong?

Is there a way to do this using custom actions?

Is there any description of customization deployed using JavaFX Packager?


EDIT

The wxi file is included and all files defined in the wxi file are installed correctly. But I can not modify the wxi file because it is generated by the compiler. Therefore, I need to modify the wxs file, but I do not know how to do this.

Here is the wxi file generated during compilation:

 <?xml version="1.0" encoding="UTF-8" ?> <Include> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Name="AppData" Id="LocalAppDataFolder"> <Directory Id="APPLICATIONFOLDER" Name="test"> <Component Id="comp0" DiskId="1" Guid="39ba98fa-6285-4336-8bd0-47ba5e16f622"> <CreateFolder/> <RemoveFolder Id="RemoveDir0" On="uninstall" /> <RegistryKey Root="HKCU" Key="Software\test GmbH\test" Action="createAndRemoveOnUninstall"> <RegistryValue Name="Version" Value="1.6" Type="string" KeyPath="yes"/> </RegistryKey> <File Id="FileId1" Name="msvcp120.dll" Source="msvcp120.dll"> </File> <File Id="FileId2" Name="msvcr100.dll" Source="msvcr100.dll"> </File> <File Id="FileId3" Name="msvcr120.dll" Source="msvcr120.dll"> </File> <File Id="LauncherId" Name="test.exe" Source="test.exe"> <Shortcut Id="desktopShortcut" Directory="DesktopFolder" Name="test" WorkingDirectory="INSTALLDIR" Advertise="no" Icon="DesktopIcon.exe" IconIndex="0" /> <Shortcut Id="ExeShortcut" Directory="ProgramMenuDir" Name="test" Advertise="no" Icon="StartMenuIcon.exe" IconIndex="0" /> </File> <File Id="FileId4" Name="test.ico" Source="test.ico"> </File> <File Id="FileId5" Name="packager.dll" Source="packager.dll"> </File> </Component> <Directory Id="dirid6" Name="app"> <Component Id="comp1" DiskId="1" Guid="ec2f648f-05ec-4deb-bf65-b938e40209f4"> <CreateFolder/> <RemoveFolder Id="RemoveDir7" On="uninstall" /> <RegistryKey Root="HKCU" Key="Software\test GmbH\test" Action="createAndRemoveOnUninstall"> <RegistryValue Name="Version" Value="1.6" Type="string" KeyPath="yes"/> </RegistryKey> <File Id="FileId8" Name="jacob-1.18-M2-x86.dll" Source="app\jacob-1.18-M2-x86.dll"> </File> <File Id="FileId9" Name="test.cfg" Source="app\test.cfg"> </File> <File Id="FileId10" Name="test.jar" Source="app\test.jar"> </File> </Component> <Directory Id="dirid11" Name="libs"> <Component Id="comp2" DiskId="1" Guid="d41462cb-43f3-4705-94b6-20b30405a6dd"> <CreateFolder/> <RemoveFolder Id="RemoveDir12" On="uninstall" /> <RegistryKey Root="HKCU" Key="Software\test GmbH\test" Action="createAndRemoveOnUninstall"> <RegistryValue Name="Version" Value="1.6" Type="string" KeyPath="yes"/> </RegistryKey> <File Id="FileId13" Name="bcprov-ext-jdk15on-152.jar" Source="app\libs\bcprov-ext-jdk15on-152.jar"> </File> <File Id="FileId14" Name="jacob.jar" Source="app\libs\jacob.jar"> </File> </Component> </Directory> </Directory> </Directory> </Directory> <Directory Id="DesktopFolder" /> <Directory Id="ProgramMenuFolder"> <Directory Id="ProgramMenuDir" Name="test GmbH"> <Component Id="comp3" Guid="b81b7415-1f39-47a9-9a99-435b3269bc7e"> <RemoveFolder Id="ProgramMenuDir" On="uninstall" /> <RegistryValue Root="HKCU" Key="Software\test GmbH\test" Type="string" Value="" /> </Component> </Directory> </Directory> </Directory> <Feature Id="DefaultFeature" Title="Main Feature" Level="1"> <ComponentRef Id="comp0" /> <ComponentRef Id="comp1" /> <ComponentRef Id="comp2" /> <ComponentRef Id="comp3" /> <ComponentRef Id="CleanupMainApplicationFolder" /> </Feature> </Include> 

EDIT 2

I tried to modify the wxs file in several ways. It seems that my changes are somehow not included in the MSI package. I added the file, registry keys and IniFile. But nothing changes in the MSI package.

Here is my current wxs file:

 <?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <Product Id="ca010b32-9fce-45aa-83f3-3a38f0903b26" Name="test" Language="1033" Version="1.00" Manufacturer="test GmbH" UpgradeCode="ab0ba5d0-6760-4c00-991d-75816e2409a7"> <Package Description="test" Comments="None" InstallerVersion="200" Compressed="yes" InstallScope="perUser" Platform="x86" /> <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" /> <!-- Check some requirements ONLY on "install", but not on modify or uninstall. --> <Property Id="JAVA_CURRENT_VERSION"> <RegistrySearch Id="JRE_CURRENT_VERSION_REGSEARCH" Root="HKLM" Key="SOFTWARE\JavaSoft\Java Runtime Environment" Name="CurrentVersion" Type="raw" Win64="no" /> </Property> <Condition Message="Java Runtime Environment (32 Bit) is not installed. Please install Oracle JRE."><![CDATA[(Installed OR JAVA_CURRENT_VERSION)]]></Condition> <Property Id="APPLICATIONFOLDER"> <RegistrySearch Key="SOFTWARE\test GmbH\test" Root="HKCU" Type="raw" Id="APPLICATIONFOLDER_REGSEARCH" Name="Path" /> </Property> <DirectoryRef Id="APPLICATIONFOLDER"> <Component Id="CleanupMainApplicationFolder" Guid="*" Win64="no"> <RemoveRegistryKey Id="RemoveValidationRegistryKeys" Action="removeOnUninstall" Root="HKCU" Key="Software\test GmbH" /> <RegistryValue Root="HKCU" Key="SOFTWARE\test GmbH\test" Name="Path" Type="string" Value="[APPLICATIONFOLDER]" KeyPath="yes" /> <!-- We need to use APPLICATIONFOLDER variable here or RemoveFolderEx will not remove on "install". But only if WiX 3.6 is used. --> <util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER" /> <IniFile Id="ConfigFile" Action="removeLine" Key="app.runtime" Name="test.cfg" Section="Application" Directory="dirid6" /> </Component> </DirectoryRef> <DirectoryRef Id="dirid6"> <Component> <IniFile Id="ConfigFileasasd" Action="removeLine" Key="app.runtime" Name="test.cfg" Section="Application" Directory="dirid6" /> <RegistryValue Key="SOFTWARE\test GmbH\test" KeyPath="yes" Root="HKCU" Value="[APPLICATIONFOLDER]" Type="string" Name="Path2" /> </Component> </DirectoryRef> <?include bundle.wxi ?> <UI /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Name="AppData" Id="LocalAppDataFolder"> <Directory Id="APPLICATIONFOLDER" Name="test"> <Directory Id="dirid6" Name="app"> <Component Id="comp1" DiskId="1" Guid="ec2f648f-05ec-4deb-bf65-b938e40209f4"> <IniFile Id="ConfigFile" Action="addLine" Directory="INSTALLDIR" Name="test.cfg" Section="Application" Key="app.runtime" /> </Component> </Directory> </Directory> </Directory> </Directory> <Icon Id="DesktopIcon.exe" SourceFile="test.ico" /> <Icon Id="StartMenuIcon.exe" SourceFile="test.ico" /> </Product> </Wix> 

EDIT 3

I myself understood what the problem is. The log states that the compiler uses the default wxs file instead of the custom wxs file.

The configuration files are saved in the C: \ Users \ xxx \ AppData \ Local \ Temp \ fxbundler5060494280971686435 \ windows directory. Use them to customize the package.

Using the default package resource [WiX configuration file] (add the package /windows/test.wxs to the class path to configure)

Where should I add / place a custom wxs file in my project?

+5
source share
1 answer

I assume your bundle.wxi file is inside the <Fragment> . You just need to add <Property Id="BundleFile"/> to the generated file, and in your main product add <PropertyRef Id="BundleFile"/>

Just referencing a file is not enough to actually include its contents in your final output. The preprocessor will go through and basically reorganize your code before compiling. If there is no link anywhere or in the link chain that ultimately links the snippet to the main <product> tag for your wix installer, this code will be discarded. This is what I assume happens when you try to link your dynamically generated wxi file. You bind it, and then the preprocessor discards everything in it because it binds nothing to your main installer.

Typically, you will use <Something Ref Id = "IdOfSomething" /> to refer to something in the fragment, so the entire fragment is included in your main product.


I read the question again, and I do not know if what I originally wrote is applicable. looking at the tag <? include ?> <? include ?> , it looks like the preprocessor puts the "/ I file" in the cmd line of the compiler. It does not insert the file where you put it in wxs.

The problem you may encounter is that you are telling your installer that the INI file is in INSTALLDIR, but I donโ€™t see you installing or defining INSTALLDIR anywhere.

0
source

All Articles