And thus as I try to warn people about, not using Windows Installer takes you deeper and deeper down the rabbit hole. This is why Microsoft documentation on Vista development urges the same advice, going back to the docs released with the earliest betas 3 years ago.


I see you are trying the Common Start Menu location for your shortcuts now. This should solve your frustration but Vista is no different from WinXP on this. I'll bet you were installing on XP and then not trying another user, hmm?

I wouldn't create Desktop shortcuts. Most users consider that crude and rude and Microsoft urges that you refrain from it. Your call of course.


In Vista the folder ProgramData is where CSIDL_COMMON_APPDATA points.

This is the folder you create an application folder under to hold any per-machine files your program uses that the user does not need to directly operate on (say, via Explorer). INI files, MDBs, etc. can go here.

Note that subfolders created here (and files created in them) can be read by all but only updated and deleted by the Owner (creating user). Your installer is expected to change the security on any such subfolders, sub-subfolders, and files to produce the desired result. For example you'd probably want an MDB file to have all but delete rights for Everyone, however the LDB lockfile Jet creates and destroys means you want its folder permissions set to grant full access for Everyone for files created in that folder.

You can stuff DLLs and such here, but that defeats most of what UAC is trying to do to protect the machine from malware. It is a lazy way out used by some software vendors that want to auto-update but don't want to do it properly. Of course "properly" can be a chore too.


... will my exe have the rights needed for standard users to use ?
This is exactly why Microsoft produced the SUAnalyzer tool. See Application Compatibility: Standard User Analyzer.

It also applies to WinXP, because if WinXP is used properly (i.e. users never run as admin, security on system folders is not tampered with) about 90% of the "Vista issues" are also seen on XP. UAC is merely an attempt to make things more secure even if stubborn users insist on running as admin.

In general though your question can only be answered depending on whether your program declares itself "Vista aware" or not. This is done by including the trustInfo section in the application manifest. By the way: Windows 7 introduces a new application manifest item to declare "Win6.0 aware" and "Win6.1 aware" but most programs will be able to ignore this (yes Virginia, Windows 7 has things that Vista doesn't - so there are new AppCompat issues).

If your program is "Vista ignorant" it will be subject to several automatically applied AppCompat shims. Registry and filesystem virtualization are the main ones. These let your program "break the rules" and store into off-limits registry and filesystem locations, jollied along by Vista (which redirects these into "virtual store" areas).

Your program might work right, or it might not. The usual problem comes from a program storing into HKLM or System32, etc. and thinking the info will be visible to all users - which it will not. Each user gets a private, virtualized copy of the data.

Relying on COM self-registration (whether by the VB6 runtime linking to the library or by running regsvr32) can also result in a virtualized, per-user component registation. Always have your installer register everything, or else use "reg-free COM" SxS isolation (which is also a WinXP feature).

If your program declares itself Vista aware, trying to write to a protected location raises an exception.