최근에 (advapi32.dll에서) RegSetValueEx 문제가 발생했습니다. 레지스트리 키 .GetValue()를 사용하여 .Net 3.5에서 해당 메서드로 저장된 REG_SZ가 .Net 4.5에서 잘못 읽힌 것 같습니다. 아래 그림 :.Net 4.5 대. 닷넷 3.5 RegSetValueEx는 낱장 널 문자를 반환합니다.
//---.Net 3.5--- (no issues)
Call RegSetValueEx() to save base64 string value "ajG8s" to the registry
Call RegistryKey.GetValue() on that value returns "ajG8s"
//---.Net 4.5--- (no issues)
Call RegSetValueEx() to save base64 string value "ajG8s" to the registry
Call RegistryKey.GetValue() on that value returns "ajG8s"
//---.Net 3.5 & .Net 4.5--- (issues)
Call RegSetValueEx() to save base64 string value "ajG8s" to the registry (in .Net 3.5)
Call RegistryKey.GetValue() on that value returns "ajG8s\0\0\0\0\0\6\A\z./,'./Z?" (in .Net 4.5)
코드는 100 % 동일합니다. 즉, .Net 4.5 버전을 전환하면됩니다.
원래 문자열에 레지스트리에 쓰여진 문자열이 제대로 null로 끝나지 않았다고 생각했습니다. 나는 또한 RegistryKey.SetValue() - RegSetValueEx (advapi32.dll) 만 사용하여 값을 쓰려고하면이 문제가 발생하는 것 같지 않은지 확인합니다.
이제 가장 간단한 해결 방법은 반환 된 문자열 (4.5에서)을 검색하여 첫 번째 null 종결 문자를 검색하고 나머지 문자열을 제거하는 것입니다. 그 해결책은 효과가 있지만 문제의 근원을 파악하고 싶습니다.
어떤 아이디어입니까? 많은 감사합니다!
레지스트리에서보고있는 값을 표시하십시오으로 다른 사람을 돕고, 당신이 수행 한 모든 진단 * 정확히 * 당신은 .NET에서 검색하는지 결정하기 위해 - 현재 우리가 말할 수있는 것이 많지 않습니다. –
문제가 무엇인지 정확히 알았으므로 이제는 더 나은 정보로 질문을 다시 작성했습니다. – Ross
"base64 문자열 값 저장"의 의미는 100 % clera가 아닙니다. 문자열로 저장하고 있습니까? 바이트로 저장 하시겠습니까? 왜'RegSetValueEx'를 사용하고 있습니까? 레지스트리에 표시되는 내용은 무엇입니까? –