I got an installer which installs an application and starts this one right after the installation was finished. This works properly for me.
But now I want to stop that application while uninstalling the application, i don’t want the user to be prompted to close applications manually. This shall work full automatic.
I ned to do this using a custom action, the WM_CLOSE message will not work in my approach (really, i tried it a couple of times).
I thought that this can’t be that difficult, but I don’t get it to work. What I did so far:
I defined a CustomAction:
<CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" />
and called it liek this:
<InstallExecuteSequence>
...
<Custom Action="CloseTrayApp" Before="InstallValidate" />
...
</InstallExecuteSequence>
But this does not work. I guess that I’m sheduling my custom action wrong, but I can’t figure out the correct time to do it.
Are there any suggestions regarding the time/place to shedule the custom action in? I’m quite unsure if
Before="InstallValidate"
is the right place to do it.
Per the FilesInUse Dialog help topic, before InstallValidate is the correct place to schedule the custom action. But I’m confused as to why the WM_CLOSE won’t work for you. I saw you asked another question and accepted it as the answer. Perhaps your TrayApp could have a “hidden” form that the user never sees but is running to receive the WM_CLOSE message. This is a trick I’ve done many times over the years.
Otherwise, if you really want to call your EXE, I suggest never using an EXE custom action. Instead use the Quiet Execution Custom Action. For some reasons on why to do this see Integration Hurdles for EXE Custom Actions.