Registrierungsschlüssel, der den Ordner für den lokalen Benutzer-Ordner Programme auf Vista enthält
-
09-06-2019 - |
Frage
Ich bin Fehlerbehebung ein Problem mit dem Erstellen von Vista Verknüpfungen.
Ich möchte sicherstellen, dass unsere Installer den Ordner Programme aus dem rechten Registrierungsschlüssel zu lesen.
Es liest es aus:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Programs
Und es ist dieses Verzeichnis für Programme zeigen:
C:\Users\NonAdmin2 UAC OFF\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
Von dem, was ich gelesen habe, scheint dies richtig ist, aber ich wollte überprüfen.
Lösung
Verwendung Windows Installer-Eigenschaften. wird wahrscheinlich einfacher sein.
http://msdn.microsoft. com / en-us / library / aa370905 (VS.85) aspx # system_folder_properties
Andere Tipps
Verwenden Sie die Registrierung nicht, dies zu lesen. Verwenden Sie SHGetFolderPath mit CSIDL_PROGRAMS.
Aus einem Grund, warum Raymond Chen Kommentare auf der "Shell Folders" Taste finden Sie unter:
http://blogs.msdn.com/oldnewthing /archive/2003/11/03/55532.aspx
Sie sollten wahrscheinlich API für diese, wie SHGetFolderPath
Sounds richtig für mich.
Beispiel des SHGetFolderPath in VB http://support.microsoft.com/kb/252652
Hilfreiche Code-Snippet:
public class Utilities
{
public enum FolderPaths
{
CSIDL_DESKTOP = 0x0000, // <desktop>
CSIDL_INTERNET = 0x0001, // Internet Explorer (icon on desktop)
CSIDL_PROGRAMS = 0x0002, // Start Menu\Programs
CSIDL_CONTROLS = 0x0003, // My Computer\Control Panel
CSIDL_PRINTERS = 0x0004, // My Computer\Printers
CSIDL_PERSONAL = 0x0005, // My Documents
CSIDL_FAVORITES = 0x0006, // <user name>\Favorites
CSIDL_STARTUP = 0x0007, // Start Menu\Programs\Startup
CSIDL_RECENT = 0x0008, // <user name>\Recent
CSIDL_SENDTO = 0x0009, // <user name>\SendTo
CSIDL_BITBUCKET = 0x000a, // <desktop>\Recycle Bin
CSIDL_STARTMENU = 0x000b, // <user name>\Start Menu
CSIDL_MYDOCUMENTS = CSIDL_PERSONAL, // Personal was just a silly name for My Documents
CSIDL_MYMUSIC = 0x000d, // "My Music" folder
CSIDL_MYVIDEO = 0x000e, // "My Videos" folder
CSIDL_DESKTOPDIRECTORY = 0x0010, // <user name>\Desktop
CSIDL_DRIVES = 0x0011, // My Computer
CSIDL_NETWORK = 0x0012, // Network Neighborhood (My Network Places)
CSIDL_NETHOOD = 0x0013, // <user name>\nethood
CSIDL_FONTS = 0x0014, // windows\fonts
CSIDL_TEMPLATES = 0x0015,
CSIDL_COMMON_STARTMENU = 0x0016, // All Users\Start Menu
CSIDL_COMMON_PROGRAMS = 0X0017, // All Users\Start Menu\Programs
CSIDL_COMMON_STARTUP = 0x0018, // All Users\Startup
CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019, // All Users\Desktop
CSIDL_APPDATA = 0x001a, // <user name>\Application Data
CSIDL_PRINTHOOD = 0x001b, // <user name>\PrintHood
CSIDL_LOCAL_APPDATA = 0x001c // <user name>\Local Settings\Applicaiton Data (non roaming)
}
[DllImport("shfolder.dll", CharSet = CharSet.Unicode)]
public static extern int SHGetFolderPath(IntPtr owner, int folder, IntPtr token, int flags, StringBuilder path);
}
void MyFunction()
{
StringBuilder path = new StringBuilder(260);
String folderPath = "";
if (0 == Utilities.SHGetFolderPath(IntPtr.Zero, (int) Utilities.FolderPaths.CSIDL_MYVIDEO, IntPtr.Zero, 0, path))
{
folderPath = path.ToString();
}
}