I finally got it working this morning. Using the same code as in Brian's below post throws an error before proceeding to rollback & generates the following in the log:
Action 17:18:59: ExecXmlConfig. MSI (s) (8C:C0) [17:18:59:379]: Executing op: CustomActionSchedule(Action=ExecXmlConfig,ActionType=3073,Source=BinaryData,Target=ExecXmlConfig,CustomActionData=1C:\Program Files (x86)\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml3/IESInterface/IESveLocationC:\Program Files (x86)\IES\VE 59\apps0) MSI (s) (8C:C0) [17:18:59:379]: Creating MSIHANDLE (42) of type 790536 for thread 960 MSI (s) (8C:0C) [17:18:59:379]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI13.tmp, Entrypoint: ExecXmlConfig MSI (s) (8C:00) [17:18:59:379]: Generating random cookie. MSI (s) (8C:00) [17:18:59:395]: Created Custom Action Server with PID 1456 (0x5B0). MSI (s) (8C:54) [17:18:59:441]: Running as a service. MSI (s) (8C:54) [17:18:59:441]: Hello, I'm your 32bit Elevated custom action server. MSI (s) (8C!3C) [17:18:59:707]: Creating MSIHANDLE (43) of type 790531 for thread 1340 ExecXmlConfig: Error 0x8007006e: failed to load XML file: C:\Program Files (x86)\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml MSI (s) (8C!3C) [17:18:59:707]: Closing MSIHANDLE (43) of type 790531 for thread 1340 MSI (s) (8C!3C) [17:18:59:707]: Creating MSIHANDLE (44) of type 790531 for thread 1340 Error 25541. Failed to open XML file C:\Program Files (x86)\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml, system error: -2147024786 MSI (s) (8C!3C) [17:19:00:754]: Product: IES <Virtual Environment> 5.9 SketchUp Plug-in -- Error 25541. Failed to open XML file C:\Program Files (x86)\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml, system error: -2147024786 MSI (s) (8C!3C) [17:19:00:754]: Closing MSIHANDLE (44) of type 790531 for thread 1340 MSI (s) (8C:0C) [17:19:00:754]: Closing MSIHANDLE (42) of type 790536 for thread 960 Action ended 17:19:00: InstallFinalize. Return value 3. As you can see the very friendly error messages refer to being unable to open the file. When the error dialog appeared I did a check of the file before I clicked OK & it existed at the supplied location, was able to be read & written etc which is what was originally confusing me (using XMLFile doesn't throw the error dialog, it just goes directly to rollback). The problem appears to be in the XML file not the code. The original file had the following in the header: <?xml version='1.0'?> I created a new XML file in Visual Studio & pasted the content of the original file in. It has the following in its header: <?xml version="1.0" encoding="utf-8"?> It now works as expected without any code changes from the below code supplied by Brian. Ironically the guy who is responsible for creating that file (and causing me a whole day of grief) appeared in the office about 20 minutes ago (we outsourced the development of this plug-in to an external contractor). Moral of the story: Don't believe the hype^H^H^H^H error message. Thanks for all your help Brian, Joel & Rob. Palbinder Sandher Software Deployment and IT Administrator T: +44 (0) 141 945 8500 F: +44 (0) 141 945 8501 http://www.iesve.com **Design, Simulate + Innovate with the <Virtual Environment>** Integrated Environmental Solutions Limited. Registered in Scotland No. SC151456 Registered Office - Helix Building, West Of Scotland Science Park, Glasgow G20 0SP Email Disclaimer -----Original Message----- From: Rob Mensching [mailto:[EMAIL PROTECTED] Sent: 22 October 2008 19:26 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? XmlConfig does not automatically create an uninstall step for you. That's why there is the "On" attribute. You get to specify what you want to have happen on uninstall. Much like SQL Strings/Scripts. -----Original Message----- From: Brian Rogers [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 10:52 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? I think the problem here is that there is no corresponding "uninstall" action for an operation like the following: <util:XmlConfig Id="AddElementText" File="[SOMEEXISTINGFILE]" Action="create" ElementPath="/someElement" Node="value" Value="NEW TEXT" On="install" Sequence="1" /> (Sample text for SOMEEXISTINGFILE:) <?xml version="1.0" encoding="utf-8"?> <someElement>ORIGINAL TEXT, THIS COULD BE ANYTHING</someElement> I do see that rollback works in the case of a problem during installation (I just tested it and it reverted to the original file). Uninstall seems trickier, and I can't think of a way to do this without resorting to a user-defined custom action (e.g. backing up the file before changing it and restoring it on uninstall). ###################################### $_='^#(/||/@[EMAIL PROTECTED]@:^[-['^";@@@\\>])@.". "{)/];)^{";$,+=(++$,);$_.=">&$,";`$_`; -----Original Message----- From: Rob Mensching [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 10:09 AM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? XmlConfig *can* edit existing XML files and on rollback it reverts any changes it makes. XmlFile does not have those capabilities. -----Original Message----- From: Brian Rogers [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 09:42 To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? Hmm, I guess there is no straightforward way to edit existing values in an XML file with XmlConfig. As you mention, if it were possible, it would make it hard to rollback changes if something goes wrong (it would somehow have to read and store the original value so it could be reverted later). I guess you'll have to use XmlFile if you want to do that. I don't think you'll be able to rollback/uninstall the change unless you write a custom action doing what I describe above (reading the original value and saving it off somewhere). That WOW64 message is not an error. From the WiX source code: // If we fail, log the error but proceed, because we may not need a particular function, or the Wow64 API at all if (!s_pfnDisableWow64) { WcaLog(LOGMSG_STANDARD, "Found Wow64 API, but unable to link to Wow64DisableWow64FsRedirection function in kernel32.dll"); } XmlConfig cannot vary due to any .NET Framework version because it is a C++ custom action with no .NET dependencies. ###################################### $_='^#(/||/@[EMAIL PROTECTED]@:^[-['^";@@@\\>])@.". "{)/];)^{";$,+=(++$,);$_.=">&$,";`$_`; -----Original Message----- From: Joel Paula (hotmail) [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 9:27 AM To: 'General discussion for Windows Installer XML toolset.' Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? Brian, XmlConfig only allows for adding or deleting elements. I understand this is more straightforward when you want to rollback. How do you "edit" an XML file? XmlFile seemed to be the thing to use, but it always throws the error " ExecXmlFile: Found Wow64 API, but unable to link to Wow64DisableWow64FsRedirection function in kernel32.dll", no matter what I try to feed it. Is it a bug and should we file a bug, or are we doing something wrong? By the way, the example you give produces a "value" attribute on the "/IESInterface/IESveLocation" node when I build and run it. Is there anything that may influence how it works, depending on the machine or the .Net framework version? I had to use something like: <util:XmlConfig Id="AddVELocation" File="[#IESveInterfaceParameters.xml]" Action="create" ElementPath="/IESInterface " Name="IESveLocation" Node="element" Value="[VE59LOCATION]apps"/> Thanks for your help. Joel Paula -----Original Message----- From: Brian Rogers [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 4:47 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Bug in x64 build of WiX UtilExtension? I'd recommend using XmlConfig instead of XmlFile. The following should achieve what you want: <util:XmlConfig Id="updateVELocation" File="[#IESveInterfaceParameters.xml]" Action="create" On="install" ElementPath="/IESInterface/IESveLocation" Node="value" Value="[VE59LOCATION]apps" /> This blog post has some more examples of using XmlConfig: http://blogs.msdn.com/gisenberg/archive/2007/10/09/wix-v3-and-xmlconfig-xmlfile-troubleshooting.aspx ###################################### $_='^#(/||/@[EMAIL PROTECTED]@:^[-['^";@@@\\>])@.". "{)/];)^{";$,+=(++$,);$_.=">&$,";`$_`; -----Original Message----- From: Pally Sandher [mailto:[EMAIL PROTECTED] Sent: Wednesday, October 22, 2008 6:12 AM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Bug in x64 build of WiX UtilExtension? I'm trying to use util:XMLFile to modify the inner text of a tag in an XML file during installation which is installed by my MSI for one of our plug-ins. The XML file is named IESveInterfaceParameters.xml and contains the following code: <?xml version='1.0'?> <IESInterface> <IESveLocation>M:\IES\apps </IESveLocation> <OutputveXMLLocation> </OutputveXMLLocation> <Preferences city='Boulder (CO)' latitude='40.017' minimumFloorArea='0.0' buildingAreaType='Office' thinWalls='1' buildingRoomService='VariableRefrigerantFlow' verticalHorizontalElementTransitionAngle='45.0' adjacencySeparationDistance='0.91441111923921' longitude='-105.283' diagnosticAids='no' minimumRoomHeight='0.0'/> </IESInterface> My installer code is as follows: <Component Id="Dialogs" DiskId="1" Guid="myguid"> ... <File Id="IESveInterfaceParameters.xml" Name="IESveInterfaceParameters.xml" Source="..\..\..\code\Sketchup\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml" /> ... <util:XmlFile Id="updateVELocation" Action="setValue" File="[#IESveInterfaceParameters.xml]" Value="[VE59LOCATION]apps" ElementPath="/IESInterface/IESveLocation" SelectionLanguage="XPath" /> </Component> All the above code is supposed to do is replace the inner text of the <IESveLocation> tag. Unfortunately the documentation for util:XMLFile leaves a lot to be desired so it doesn't work as yet (back to good old trial & error again). Any help would be appreciated however this isn't what I'm referring to as a bug. The machine that I use to build my MSIs runs XP64. I install the Wix3_x64.msi package when updating my WiX compiler (currently using v3.0.4617.0). When I build my MSI in Visual Studio it is set to build as x86 & checking it in Orca shows the Platform set to "Intel". If I attempt to install it on an XP64 Virtual Machine I get the following in the log: Action 12:08:28: ExecXmlFile. MSI (s) (40:C4) [12:08:28:138]: Executing op: CustomActionSchedule(Action=ExecXmlFile,ActionType=3073,Source=BinaryData,Target=ExecXmlFile,CustomActionData=1€1€C:\Program Files (x86)\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml€3€/IESInterface/IESveLocation€€C:\Program Files (x86)\IES\VE 59\) MSI (s) (40:C4) [12:08:28:138]: Creating MSIHANDLE (10) of type 790536 for thread 1988 MSI (s) (40:C0) [12:08:28:138]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI4.tmp, Entrypoint: ExecXmlFile MSI (s) (40:C0) [12:08:28:169]: Generating random cookie. MSI (s) (40:C0) [12:08:28:169]: Created Custom Action Server with PID 1464 (0x5B8). MSI (s) (40:A8) [12:08:28:216]: Running as a service. MSI (s) (40:A8) [12:08:28:216]: Hello, I'm your 32bit Elevated custom action server. MSI (s) (40:C0) [12:08:28:497]: Closing MSIHANDLE (10) of type 790536 for thread 1988 Action ended 12:08:28: InstallFinalize. Return value 3. It then does a rollback & throws up the FatalError dialog. I'm guessing this is because my code is incorrect however when I attempt to install the same MSI on an XP32 Virtual Machine I get the following in the log: Action 12:09:11: ExecXmlFile. MSI (s) (94:10) [12:09:11:325]: Executing op: CustomActionSchedule(Action=ExecXmlFile,ActionType=3073,Source=BinaryData,Target=ExecXmlFile,CustomActionData=1€1€C:\Program Files\Google\Google SketchUp 6\Plugins\IESLink\Dialogs\IESveInterfaceParameters.xml€3€/IESInterface/IESveLocation€€C:\Program Files\IES\VE 59\) MSI (s) (94:10) [12:09:11:340]: Creating MSIHANDLE (10) of type 790536 for thread 1296 MSI (s) (94:38) [12:09:11:340]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI4.tmp, Entrypoint: ExecXmlFile MSI (s) (94:A0) [12:09:11:340]: Generating random cookie. MSI (s) (94:A0) [12:09:11:356]: Created Custom Action Server with PID 532 (0x214). MSI (s) (94:BC) [12:09:11:418]: Running as a service. MSI (s) (94:BC) [12:09:11:418]: Hello, I'm your 32bit Elevated custom action server. MSI (s) (94!88) [12:09:13:637]: Creating MSIHANDLE (11) of type 790531 for thread 648 ExecXmlFile: Found Wow64 API, but unable to link to Wow64DisableWow64FsRedirection function in kernel32.dll MSI (s) (94!88) [12:09:13:653]: Closing MSIHANDLE (11) of type 790531 for thread 648 MSI (s) (94!88) [12:09:13:653]: Creating MSIHANDLE (12) of type 790531 for thread 648 ExecXmlFile: Found Wow64 API, but unable to link to Wow64RevertWow64FsRedirection function in kernel32.dll MSI (s) (94!88) [12:09:13:653]: Closing MSIHANDLE (12) of type 790531 for thread 648 MSI (s) (94:38) [12:09:13:715]: Closing MSIHANDLE (10) of type 790536 for thread 1296 Action ended 12:09:13: InstallFinalize. Return value 3. Why any mention of the WoW64 API exists when running on 32-bit XP is bizarre. Hence I reckon it's a bug. I haven't tried installing the non-x64 WiX MSI as yet but while I do, if anyone could confirm or deny this as being a bug before I report it on the SourceForge tracker it would be a great help. Cheers, Palbinder Sandher Software Deployment and IT Administrator T: +44 (0) 141 945 8500 F: +44 (0) 141 945 8501 http://www.iesve.com **Design, Simulate + Innovate with the <Virtual Environment>** Integrated Environmental Solutions Limited. Registered in Scotland No. SC151456 Registered Office - Helix Building, West Of Scotland Science Park, Glasgow G20 0SP Email Disclaimer ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users