Раздел реестра, содержащий папку для папки «Программы» локального пользователя в Vista - PullRequest
0 голосов
/ 12 сентября 2008

Я устраняю проблему с созданием ярлыков Vista.

Я хочу убедиться, что наш установщик читает папку «Программы» из правого раздела реестра.

Это читает это от:

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

И он показывает этот каталог для программ:

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

Из того, что я прочитал, это кажется правильным, но я хотел проверить еще раз.

Ответы [ 6 ]

4 голосов
/ 12 сентября 2008

Не используйте реестр, чтобы прочитать это. Используйте SHGetFolderPath с CSIDL_PROGRAMS.

По какой причине см. Комментарии Раймонда Чена о ключе «Папки оболочки»:

http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx

1 голос
/ 12 сентября 2008

Для этого вам, вероятно, следует использовать API, например SHGetFolderPath

1 голос
/ 12 сентября 2008

использовать свойства установщика Windows. вероятно будет проще.

http://msdn.microsoft.com/en-us/library/aa370905(VS.85).aspx#system_folder_properties

0 голосов
/ 12 сентября 2008

Фрагмент кода:

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

}
0 голосов
/ 12 сентября 2008

Пример SHGetFolderPath в VB http://support.microsoft.com/kb/252652

0 голосов
/ 12 сентября 2008

Звучит правильно для меня.

...