'AppStylist'에 해당되는 글 1건

  1. 2010.04.28 AppStylist Editors 탭 선택 에러 (혹은 UltraTimeZoneEditor 생성자 에러)

AppStylist Editors 탭 선택 에러 (혹은 UltraTimeZoneEditor 생성자 에러)

|

AppStylist 프로그램을 이용하여 스킨을 설정하려고 할 때 Editors 탭을 선택하면
"동일한 키를 사용하는 항목이 이미 추가되었습니다."
라는 메시지로 에러 화면이 발생합니다.

이것이 UltraTimeZoneEditor에서 TimeZone 리스트를 가져오기 위한 작업을 할 때
다음 두 곳중 레지스트리가 존재하는 한곳의
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones
STD의 값을 키값으로 이용하고 있습니다.

이 때 이용하는 키 값이 중복이 되어서 그렇습니다.

Windows Server 2003 R2 한글 PC의 경우엔 다음 두 곳에서 중복 키가 존재했습니다.(PC마다 다를 수 있습니다.)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time

동일 키가 존재하면 STD값을 다르게 처리하면 됩니다.
(Windows 7의 경우에는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time의 STD값 뒤에 스페이스 하나가 더 들어가 있습니다.)

다음 소스는 제가 검사할 때 이용한 소스입니다.

private static void CheckTimeZones()
{
    string name = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones";
    string name2 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones";

    RegistryKey key = null;
    key = Registry.LocalMachine.OpenSubKey(name, false);
    if (key == null)
    {
        key = Registry.LocalMachine.OpenSubKey(name2, false);
    }
    if (key == null)
    {
        return;
    }

    string[] subKeyNames = key.GetSubKeyNames();
    if (subKeyNames == null)
    {
        return;
    }

    Dictionary dic = new Dictionary(subKeyNames.Length);

    RegistryKey key2 = null;

    for (int i = 0; i < subKeyNames.Length; i++)
    {
        name = subKeyNames[i];
        if (name != null)
        {
            key2 = key.OpenSubKey(name, false);
            if (key2 != null)
            {
                string displayName = key2.GetValue("Display") as string;
                string standardName = key2.GetValue("Std") as string;
                try
                {
                    dic.Add(standardName, displayName);
                }
                catch
                {
                    throw new Exception(key2.Name + "의 Std값이 중복되었습니다.");
                }
            }
        }
    }
}
And
prev | 1 | next