This is normal behavior when a repair kicks in. If you did something like
remove files or folders then a repair will kick in to restore files or
registry entries. This repair is at the installer component level, so the
installer component is re-installed. Visual Studio custom actions are
typically conditioned internally on installation of the component, so your
custom action is called again. Having a condition of Not Installed on the
install custom action stops it being called again on a repair. Installed is
a case-sensitive property.

Signature
Phil Wilson
[MVP Windows Installer]
> Hi there,
>
[quoted text clipped - 10 lines]
> Has anyone seen this behaviour before. It looks like something is
> seriously broken in the logic behind this class. Thanks.
Phil Wilson - 21 Mar 2008 22:18 GMT
Adding what I added in the MSDN ClickOnce/Setup forum reply:
In this case the repair is because it's running as a different user and
something appears to be missing, probably a user-specific item that's being
installed, a file or registry entry.

Signature
Phil Wilson
[MVP Windows Installer]
> This is normal behavior when a repair kicks in. If you did something like
> remove files or folders then a repair will kick in to restore files or
[quoted text clipped - 18 lines]
>> Has anyone seen this behaviour before. It looks like something is
>> seriously broken in the logic behind this class. Thanks.
Larry Smith - 22 Mar 2008 01:58 GMT
> Adding what I added in the MSDN ClickOnce/Setup forum reply:
>
> In this case the repair is because it's running as a different user and
> something appears to be missing, probably a user-specific item that's
> being installed, a file or registry entry.
Thanks (note that I'm now logged onto my own account again). See my reply in
the forum under the title "Is this a bug? Can't acccess ".InstallState" file
as non-admininstrator" (for others reading this).