Three options sprang to mind.

#1
The REINSTALLMODE property
http://msdn.microsoft.com/en-us/library/aa371182(VS.85).aspx

If you set this, it affects all components. You can't isolate that behavior
to just one component.

#2
Make sure license.dat is a PE file with a version resource, and make sure
that the version is "higher" in the "demo" license than it is in the
registered licenses. This would have the side effect that if Repair is run,
the user would have to re-download his license (since it would be
overwritten). Not sure what would happen in an uninstall, it may "upgrade"
the license file to the demo license file in that scenario also. You would
have to test it.

#3
Run MsiSetComponentState from a custom action. I haven't tried this, so I
don't know if it would work. If you do try it, it must be sequenced
"After='CostFinalize'" and you probably need to sequence it in both
InstallUISequence AND InstallExecuteSequence.

-----Original Message-----
From: Armin Linder [mailto:arminlin...@arminlinder.de] 
Sent: Tuesday, October 27, 2009 5:15 PM
To: General discussion for Windows Installer XML toolset.
Subject: [WiX-users] Always install a specific feature/component ...

And once more I need to seek your help.

I have an application, which has a license file, let's call it 
license.dat. Per default the contents of license.dat puts the 
application in a kind of demo mode and encourages the user to register 
over the Internet. I authored it to be a component with a specific GUID. 
The application is another component with a different GUID, and both are 
installed as a single feature. Works nicely, easy job.

Some day, to get the full features, the user registers his product over 
the Internet. Technically the license.dat file gets overwritten with a 
new one, containing license info. The license info in the file unlocks 
the application's full features for a specific time. Once the license 
expires, the application resets itself to demo mode (without touching 
the license.dat file, it knows from the contents of the file that the 
license has expired). Works too.

And now things get weird. The application's marketing concept is 
modular, which means that the user may after some time purchase another 
module of this product and install it. The new module does also come 
with the same license.dat file that contains the demo license. The same 
component and GUID like above is used to author the same component like 
above, since it is the same file as above, and despite that there isn't 
a way to tell which product modules someone purchases in which order, so 
every module can potentioally be the first one (and probably even the 
only one) a user installs, and thus every modue must contain the demo 
license.dat file.

It is the intention of the vendor that in case of installation of a 
second (third, fourth .-..) module the demo license.dat file overwrites 
the old (registered or unregistered, don'tcare) one, so the user does 
need to register again (whch will reset the usage time, so he can 
utilize the product for a full time period again). Unfortunately smart 
Windows Installer thinks, he already has installed the component, and 
skips it, so the license.dat file is not reset to the demo license, the 
user has no reason to re-register, and the application reverts to demo 
mode as soon as the old license expires. At this point the user would 
either call suppport and complain that his license expired prematurely, 
or be a smart one and use the license of the second purchase to 
re-activate the product, which is OK, but inconvenient after such a long 
time after installation.

No problem, you'd say, just author the component containing file using a 
differend GUID, and the file will be overwritten. Great, but what 
happens during an uninstall? If the user uninstalls either component, 
the file will get deleted, since it's reference count is 1. The 
application will stop working, because it does have neither a demo nor a 
registered license.dat file, though all but one modules are still installed.

The obvious solution wold be to author the component using the same 
GUID, so the reference counter gets 2, but have it overwrite ("refresh") 
the file. When uninstalling, the reference counter would decrease, but 
the file would be left unchanged, which is exactly what I want. 
Unfortunately I found no option setting for either component or file to 
get this behavior.

All together: how can I author a shared component which "refreshes" 
itself when installed a second, third, ... time, but shows normal 
uninstall behaviour (decrease the reference counter, and get deleted 
when the internal reference counter reaches 0)?

Another approach would be: the application has several other files which 
show correct installation/deinstallation behaviour when installed by 
multiple products (increase reference counter with every installation, 
decrease it with every uninstallation, and delete it when the counter 
reaches 0). If I could find a way to tie the deletion of the license.dat 
file to the deletion of one of those files, this would save me as well.

And probably I missed something entirely, and tehre is another way to 
get what I need using a different approach?

Any hints/ideas/leads to documentations welcome,

Armin.

P.S. Just to mention it, the behaviour of the copy protection/licensing 
software, which is a 3rd party product, can, unfortunately, not be 
influenced. Messing with the license.dat file is the only way..


----------------------------------------------------------------------------
--
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

Reply via email to