Link to home
Start Free TrialLog in
Avatar of atari
atari

asked on

How to refresh the WINDOWS desktop calling API-functions ?

I have written an installation program with InstallShield 5.1. While deinstallation I call a custom-dll that deletes some files
that couldn't automatically deleted by unInstallShield. I have some shortcuts in WINDOWS start menu installed. After deinstallation I
can check with Explorer, that these .LNK-files in the subfolder of the start menu are deleted, but they are still displayed in
Windows 95 start menu, because Windows keeps all the desktop symbols and start menu in cache. I asked this question also
at InstallShield, but didn't got any good answer for it. I could call while deinstallation any API-functions from my
custom-deinstallation-DLL, that could refresh the start menu and the desktop symbols.

I need a way how to do it !
Avatar of chacko
chacko

InstallShield provides functions to add/delete folders/icons/shortcuts. R u using free edition/professional edition? Professional edition has. If can not There are SDK functions to add/delete folders/icons...
Avatar of atari

ASKER

This was not the question. I asked, how I can refresh the Windows startmenu entries and the Windows desktop after deinstallation. The problem is, that Windows hold all the startmenu entries and desktop symbols in cache and after deinstallation of my program the startmenu entries are still there and are updated only after rebooting of the system. That's a known problem for Installshield, but they have no solution how to refresh the start menu entries after deinstallation with unInstallShield. But I have seen a program, called 'TuneUp 97' that has an option to read the desktop symbols and the startmenu entries in Windows cache again. Afterwards my startmenu entries are correctly deleted. So there must be a way, to program this option with API-functions in VC++, to call it from my custom-deinstallation-DLL, that will be called after deinstallation with unInstallShield..
For your information: I'm using InstallShield 5.1 (newest available version.).
Does this happen on NT as well?
ASKER CERTIFIED SOLUTION
Avatar of piano_boxer
piano_boxer

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of atari

ASKER

Answer to tma:
I have searched all the newsgroup of installshield.com and what was very nice, that also an installshield-engineer thought first, that it was a bug of InstallShield 5.1, that the start menu not always is refreshed, and he said, that in the next version of InstallShield this bug will be updated. One day later he wrote, that InstallShield and unInstallShield are both working correct, but the start menu entries are kept in cache and first after rebooting or again reading the cache again the startmenu .LNK-files will be refreshed. That was very funny, when I wrote this. The installshield engineer said, that it happens also on Windows95/NT and very surprisingly also on Windows 98. Sometimes the refresh is working correctly if you have a subfolder in startmenu-folder and you delete the whole folder after deinstallation. But if you have a multiple application installation, say you have a subfolder in startmenu-folder, that includes several links for deinstallation, called 'Deinstall program 1', 'Deinstall program 2' and so on, then after uninstalling only one of this program, say program 1, then the .LNK-file is correctly deleted, but in startmenu the entry 'Deinstall program 1' is still there.

This is only a comment.
Piano_boxer (nice name), nice answer, but seems very hard to implement, ok, I will try it, yes, I forgot Tweak UI, it's only hard to test, because I must install programs first and then uninstall it, and then my uninstall.dll will be called with the functions above.

Give me one or two days !
Bye,
atari
Avatar of atari

ASKER

Great, everything works fine, the startmenu entries after calling SHChangeNotify( SHCNE_ALLEVENTS, SHCNF_IDLIST, lpil, NULL);  are now refreshed after deinstallation with unInstallShield.

Excellent answer, I am very surprised, that it works so fine.

Bye,
atari
Great, I'm happy that it worked (I was unable to verify it 100% my self).