When I searched in Google, I found some one has the same problem as me. And the suggested solution is to define a property using RegistrySearch. And also define a registry with the install path [APPLICATIONFOLDER]. So that the upgrade will only happen when the registry with path found.
I tried it as: <Property Id="INSTALLDIR"> <RegistrySearch Id='ViewPointRegistry' Type='raw' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' /> </Property> <DirectoryRef Id="APPLICATIONFOLDER"> <Component Id="RegistryForUpgrade" Guid="D555488C-C8E7-44eb-91EC-3750602A7599"> <Registry Id='ViewPointInstallDir' Root='HKCU' Key='Software\Microsoft\ViewPointUpgrade' Name='InstallDir' Action='write' Type='string' Value='[APPLICATIONFOLDER]' /> </Component> </DirectoryRef> And call custom action as: <Custom Action="UpgradeStopServices1" Before="InstallFiles">PREVIOUSFOUND AND INSTALLDIR</Custom> But I got warning when I compile it: warning CNDL1080: The Registry element has been deprecated. Please use one of the new elements which replaces its functionality: RegistryKey for creating registry keys, RegistryValue for writing registry values, RemoveRegistryKey for removing registry keys, and RemoveRegistryValue for removing registry values. And when I install this version 2 installer msi, select PathB, the problem is still there. Is there something wrong in the Registry define? How to change it? -----Ursprüngliche Nachricht----- Von: Jiang, Chunyan (GE Healthcare) Gesendet: Donnerstag, 22. Oktober 2009 09:04 An: General discussion for Windows Installer XML toolset. Betreff: [WiX-users] Upgrade and new install Hi Wix-users, I have developed one upgradable installer with Wix3. As I understand that main upgrade is same as new install. My scenario is that my version 1 has been installed to PathA. And I have an upgraded version 2. If I install version to to PathA, the old files are removed, the new files are installed. Everything is fine. If I install version 2 to PathB, the new files are copied to PathB, same as new install. It sounds good. However, there are custom actions in my installer, named MyCA. MyCA should be called only by upgrade. So if version 2 installed to PathA, MyCA in PathA will be called. It is fine. But if version 2 is installed in PathB, MyCA in PathA will still be called. It causes some problem for PathB install. How can I make a condition to MyCA, so that it will only be called when the upgraded version installed in it's path? If version 2 is installed in PathB, discard MyCA in PathA, do it same as new install. Best regards Chunyan ------------------------------------------------------------------------------ Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------------ Come build with us! The BlackBerry(R) Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9 - 12, 2009. Register now! http://p.sf.net/sfu/devconference _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users