2010-02-26 5 views
0

내 C# 코드에서 레지스트리 키를 설정하려고하지만 항상 작동하지 않습니다. 때로는 효과가 있고 때로는 그렇지 않습니다. 나는 미치광이가되기 시작했습니다 ... 이전 프로젝트에서 필자는 레지스트리에 쓰고 읽는 데 아무런 문제가 없었지만 지금은합니다.레지스트리 키 설정이 작동하지 않습니다. 때때로

는 여기에 내가 사용하고 코드입니다 : 이미 시도했지만 작동하지 않았다 무엇

string newVersion = "10A"; 
RegistryKey key = null; 
try 
{ 
    key = Registry.CurrentUser.CreateSubKey("Software\\stuff1\\stuff2 " + newVersion + "\\" + newVersion + "\\stuff3\\Settings", RegistryKeyPermissionCheck.ReadWriteSubTree); 
    key.SetValue("CopyConvertDone", "1", RegistryValueKind.String); 
    key.Flush(); 
    rep.Message("CopyConvertDone registry key set for revision: " + newVersion); 
} 
catch (Exception e) 
{ 
    rep.Error(e); 
} 
finally 
{ 
    if (key != null) 
    { 
     key.Close(); 
    } 
    else 
    { 
     rep.Error("Registry key is set to null."); 
    } 
} 

: 를 - 대신 내가 true로 설정 쓰기 매개 변수 OpenSubKey 시도 CreateSubKey을 사용. - .Flush() 메서드가 추가되었습니다. - Thread.Pause (2000)는 내 프로그램을 진행하기 전에 잠시 시간을내어 주셨습니다 (이 레지스트리 키가 필요함)

오류가 발생하지 않았으며 해당 하위 키는 이미 있지만 값 (CopyConvertDone)이 없습니다. '티.

누구든지이 코드에서 문제를 볼 수 있으며 가능한 해결책이 있습니까?

+0

실패 할 때 어떤 일이 발생하는지 분명히 할 수 있습니까? 예를 들어 레지스트리에 어떤 예외가 발생했거나 변경되지 않았습니까? – glenatron

+0

위 코드를 실제로 호출하고 있습니까? –

답변

3

코드가 괜찮은 것처럼 보이지만 일부 작업을 수행하는 경우 Process Monitor을 사용하여 레지스트리에 대한 호출 및 성공/실패를 확인할 수 있습니다.

0

올바른 모양입니다. 어쩌면 플러시를 제거하려고합니다. MSDN에서 : An application should only call Flush if it must be absolute certain that registry changes are recorded to disk. In general, Flush rarely, if ever, need be used.

당신은 이미 finally 문에서 RegistryKey를 닫습니다.

2

안토니가 제안한 프로세스 모니터를 사용하여 Windows 7이 내 쓰기를 HKCU\Software\Classes\VirtualStore\MACHINE 아래의 키로 리디렉션하고 있음을 발견했습니다.

다른 사람이이 문제가있는 경우를 대비 한 포인터입니다.

+0

설명을 보려면 다음 SO 응답을 참조하십시오. http://stackoverflow.com/a/10941367/155167 – Mario

관련 문제