Vista의 로컬 사용자 프로그램 폴더에 대한 폴더가 포함된 레지스트리 키

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

  •  09-06-2019
  •  | 
  •  

문제

Vista 바로가기 생성과 관련된 문제를 해결하고 있습니다.

설치 프로그램이 올바른 레지스트리 키에서 프로그램 폴더를 읽고 있는지 확인하고 싶습니다.

다음에서 읽습니다.

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

그리고 프로그램에 대해 다음 디렉토리가 표시됩니다.

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

내가 읽은 바에 따르면 이것이 맞는 것 같지만 다시 확인하고 싶었습니다.

도움이 되었습니까?

해결책

Windows 설치 프로그램 속성을 사용하십시오.아마도 더 쉬울 것입니다.

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

다른 팁

이 내용을 읽으려면 레지스트리를 사용하지 마십시오.사용 SHGetFolder경로 CSIDL_PROGRAMS를 사용합니다.

그 이유는 "Shell Folders" 키에 대한 Raymond Chen의 설명을 참조하세요.

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

아마도 이를 위해 다음과 같은 API를 사용해야 할 것입니다. SHGetFolder경로

나에게는 맞는 것 같습니다.

VB의 SHGetFolderPath 예http://support.microsoft.com/kb/252652

유용한 코드 조각:

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

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top