我最近遇到了RegSetValueEx(來自advapi32.dll)的問題。它看起來像使用RegistryKey.GetValue()在.net 4.5中正確讀取.Net 4.5中的該方法保存的REG_SZ。插圖如下:.Net 4.5 vs .Net 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版本。
最初我以爲也許正在寫入註冊表的字符串不是正確的空終止 - 它是。我也證實,如果我嘗試使用RegistryKey.SetValue()寫入值,則不會發生這種情況 - 只有RegSetValueEx(來自advapi32.dll)似乎會導致此行爲。
現在最簡單的解決方案是簡單地搜索返回的字符串(4.5)中的第一個空終止字符並刪除字符串的其餘部分。該解決方案有效,但我寧願找出問題的根源。
什麼是造成它的任何想法?非常感謝!
請出示你在註冊表中看到的值,你已經執行的任何診斷,以確定準確* *你要在.NET中檢索 - 目前我們沒有太多可以說的。 – 2014-09-23 06:06:10
用更好的信息重寫了這個問題,現在我知道問題到底是什麼:) – Ross 2014-10-06 05:08:50
它不是100%清除「保存base64字符串值」的含義 - 是將它保存爲字符串還是你將它保存爲字節?你爲什麼使用'RegSetValueEx'呢?註冊表顯示什麼? – 2014-10-06 06:16:09