That's a (almost) backwards compatible thing. According to what I've read, you can "get with Microsoft's" program and it will work fine. Their "program" is writing to the registry in the user area.. per user... which doesn't always apply. I'm no Vista guy so I've only encountered this lending a hand to clients and colleagues at work. I personally don't like Microsoft's "program" 100% - but there are some valid reasons for the decisions they made with Vista. The real issue is they should have come up with them a decade ago.
My recommendation for this kind of stuff is - for applications that only have per user settings - go Microsoft way, write to user "application" directory, and same with registry. Keep only readonly files in the c:\program files\ area.
For programs that need global settings that "anyone" can and should be able to modify for all (which in a business setting isn't so much unless the software manages its own security....) like a game maybe too - just don't install to c:\program files, and make a self contained directory structure like:
MyProgramName
--bin
--config
--log
--data (from using program)
--media (like static stuff maybe)
But for "proper" behaving software - do the writing to user areas.
This is how its more or less done on mac and unix and posix OS's... there is a /usr area, /usr/bin/ which are publicy available, there is /etc for configuration, there is /var/log for log files.
thats a sumamry - but... to get back on point - learn how to use the windows authenticatin to fine the current user info - and I'll bet there is a API call to get the user's directory... it might just be a alias like %userdir% or something you can use in the path for the filename... and the registry is already integrated, where looking for "HKEY_USER" (something like that) will get you the registry "stuff" for the logged in user.