2008-09-11 8 views
0

Je suis en train de résoudre un problème de création de raccourcis Vista.Clé de Registre contenant le dossier du dossier Programmes de l'utilisateur local sous Vista

Je veux m'assurer que notre programme d'installation lit le dossier Programs à partir de la bonne clé de registre.

Il est lu à partir de:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Programs 

Et il est montrant ce répertoire pour les programmes:

C:\Users\NonAdmin2 UAC OFF\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 

D'après ce que j'ai lu, cela semble correct, mais je voulais vérifier.

Répondre

1

Vous devriez probablement utiliser l'API pour cela, tels que SHGetFolderPath

0

extrait de code utiles:

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

} 
Questions connexes