I can detect REPAIR by setting a custom property. Here is how I did it: In my MYWIXUI_MONDO.wxs file, I specified values for CUSTOMMODE property as below. I than detect the value of CUSTOMMODE in CustomAction and perform actions accordingly.
<Publish Dialog="LSBMaintenanceTypeDlg" Control="InstallButton" Event="NewDialog" Value="LSBUserRegDialog" Order="1">1</Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="InstallButton" Property="CUSTOMMODE" Value="[CUSTOMINSTALL]" Order="2" >1</Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveOneAppButton" Event="NewDialog" Value="LSBUserRegDialog" Order="1" >1</Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveOneAppButton" Property="CUSTOMMODE" Value="[CUSTOMREMOVEONE]" Order="2" >1</Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="LSBUserRegDialog">1 </Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveButton" Property="CUSTOMMODE" Value="[CUSTOMREMOVEALL]" Order="2" >1</Publish> <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveButton" Property="WixUI_InstallMode" Value="Remove" Order="1" >1</Publish> This works fine. I however noticed that my REMOVE button also kicks of the Custom Action routine that I have implemented for INSTALL/CUSTOM/CHANGE/REPAIR scenario. I do have a separate Uninstall Custom Action implemented. It is getting called when I use msiexec /X mysetup.msi. Just doesn't work for REMOVE button in my CustomMaintenanceTypeDlg case. Note: For original MaintenanceTypeDlg case, REMOVE uninstalls the application correctly, so default behavior is fine. I have compared both sets of .WXS files MaintenanceTypeDlg vs CustomMaintenanceTypeDlg WIXUI_Mondo vs MyWixUI_Mondo. I tried following in MYWIXUI_Mondo. <Publish Dialog="LSBMaintenanceTypeDlg" Control="RemoveButton" Property="WixUI_InstallMode" Value="Remove" Order="1" >1</Publish> However that doesn't work either. Any further pointers? In worst case I will have to ask the clients to Uninstall through msiexec /x setup.msi OR through ARP. Thanks, Shital Mehta IT Developer -----Original Message----- From: John Cooper [mailto:jocoo...@jackhenry.com] Sent: Wednesday, February 29, 2012 1:25 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Concurrent Installations and Custom Actions Sure. In a Repair, you'll have the property REINSTALL probably set to "All" (don't quote me on the casing). So, a test like REINSTALL ~= "All" (the tilde makes the test case insensitive) will help detect this mode. Because you're effectively doing it twice, you're going to have to duplicate the functionality of the REINSTALL property too. If patching is on your agenda too (I don't think your scenario will work for it), the REINSTALL property gets set to the one or more features that are having the patched applied. -- John M. Cooper -----Original Message----- From: ShitalKumar Mehta (Synergy Technologies LLC) [mailto:v-shm...@microsoft.com] Sent: Wednesday, February 29, 2012 1:24 PM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Concurrent Installations and Custom Actions Hello John, Thanks for the response. I have sequenced my custom installation dialogs as following. INSTALL: WelcomeDlg, SetupTypeDlg, UserRegistrationDlg, VerifyReadyDlg, EndDialog. INSTALL AGAIN: MaintenanceWelcomeDlg, CustomMaintenanceSetupTypeDlg, CustomUserRegDlg, EndDialog. Happy Trail: Install... One instance is installed. Reinstall..... you have 3 options similar to and stolen from MaintenanceTypeDlg CHANGE... I install another application database, binaries. I am achieving this by putting conditional clause "INSTALLED AND (NOT REMOVE)" REMOVE... I uninstall All the applications completely. REPAIR... I want to simulate "REMOVE AN APP" but not completely UNINSTALL/UNREGISTER the product Everything is good. Only problem is REPAIR. My separate custom actions for REPAIR are not getting called, but the CHANGE custom actions are called every time. CHANGE: <InstallExecuteSequence> <Custom Action ="SetCustomActionDataValueR" Before="InstallFinalize">Installed AND (NOT REMOVE)</Custom> <Custom Action="CustomAction1idR" After="SetCustomActionDataValueR"> Installed AND (NOT REMOVE)</Custom> </InstallExecuteSequence> REPAIR SIMULATING "REMOVE AN APP": <InstallExecuteSequence> <Custom Action ="RemoveAnAppDataValue" Before="InstallFinalize">REPAIR</Custom> NOTE: <Custom Action="RemoveAnAppId" After="RemoveAnAppDataValue">REPAIR</Custom> </InstallExecuteSequence> To me it looks like the conditional terminology I am using for CHANGE AND REPAIR isn't correct and once I get a hint, I would be like "Ohhhhh really". Would you have that hint for me please? Thanks, Shital Mehta IT Developer -----Original Message----- From: John Cooper [mailto:jocoo...@jackhenry.com] Sent: Monday, February 27, 2012 11:18 AM To: General discussion for Windows Installer XML toolset. Subject: Re: [WiX-users] Concurrent Installations and Custom Actions You'd be way better off using a chainer. That being said, you're probably going to have to conditional the second install on the install states of a feature(s) or component(s) and create your own "Installed_Second" property to effectively mimic the behavior of "Installed." You're going to hate yourself though when you try to update or patch things. -- John Merryweather Cooper Build & Install Engineer - ESA Jack Henry & Associates, Inc.(r) Shawnee Mission, KS 66227 Office: 913-341-3434 x791011 jocoo...@jackhenry.com www.jackhenry.com -----Original Message----- From: ShitalKumar Mehta (Synergy Technologies LLC) [mailto:v-shm...@microsoft.com] Sent: Monday, February 27, 2012 1:08 PM To: wix-users@lists.sourceforge.net Subject: [WiX-users] Concurrent Installations and Custom Actions Contrary to norm, I have implemented a concurrent installation scenario where one second install, user will go through my custom install dialogs. One last leg, I present them with "Install" button, which simulates what "VerifyReadyDlg" dialog's custom install option would do. <Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgInstall)"> <Condition Action="show">NOT Installed AND ALLUSERS</Condition> <Condition Action="enable">NOT Installed</Condition> <Condition Action="default">NOT Installed</Condition> <Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish> <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish> <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish> <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish> </Control> This works fine, what works backwards for me now is that my CUSTOM ACTIONS for INSTALL don't work on 2nd Install, because they are coded to run when "NOT Installed". Also my Custom Actions for UNINSTALL only are now running on 2nd install onwards because they are coded to run when product is "INSTALLED". Here is how I have put logic to run custom actions. Any pointer to tweak this final thing would be greatly appreciated. What would do the trick for me would be to a pointer that would tell me, if there is alternate terminology for following two: <InstallExecuteSequence> <Custom Action ="SetCustomActionDataValue" Before="InstallFinalize">NOT Installed </Custom> --This should run every time except on UNINSTALL through /X cmdline or Add Remove Program's 'Remove' option. <Custom Action="CustomAction1id" After="SetCustomActionDataValue">NOT Installed </Custom> </InstallExecuteSequence> <InstallExecuteSequence> <Custom Action ="UninstallOnly" Before="InstallFinalize" /> <Custom Action="UninstallOnlyCA" After="UninstallOnly" > Installed </Custom> -- Here is where I want the Uninstall to work only when someone is explicitly uninstalling using /X or Add Remove programs "Remove" option. </InstallExecuteSequence> Thanks, Shital Mehta IT Developer ------------------------------------------------------------------------------ Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users NOTICE: This electronic mail message and any files transmitted with it are intended exclusively for the individual or entity to which it is addressed. The message, together with any attachment, may contain confidential and/or privileged information. Any unauthorized review, use, printing, saving, copying, disclosure or distribution is strictly prohibited. If you have received this message in error, please immediately advise the sender by reply email and delete all copies. ------------------------------------------------------------------------------ Try before you buy = See our experts in action! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-dev2 _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users NOTICE: This electronic mail message and any files transmitted with it are intended exclusively for the individual or entity to which it is addressed. The message, together with any attachment, may contain confidential and/or privileged information. Any unauthorized review, use, printing, saving, copying, disclosure or distribution is strictly prohibited. If you have received this message in error, please immediately advise the sender by reply email and delete all copies. ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users