Registrierungsschlüssel, der den Ordner für den lokalen Benutzer-Ordner Programme auf Vista enthält

StackOverflow https://stackoverflow.com/questions/57855

  •  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.

War es hilfreich?

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();
    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top