2014-01-03 3 views
0

У меня есть WOW сценарий и хотите изменить значение ключа вКак написать HKLM без перенаправления WOW в сценарии WOW?

HKLM \ Software \ Microsoft \ ABCD \

Я использую этот код:

String key = @"SOFTWARE\Microsoft\ABCD\"; 
RegistryKey reg64key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
RegistryKey reg_64bit_Name = reg64key.OpenSubKey(key); 
reg_64bit_Name.SetValue("Name","ahsan"); 

Однако это не работает , Можете ли вы любезно предложить, что мне нужно сделать здесь?

NB: 1. Не работают средства я получаю следующее исключение при запуске приложения:

System.NullReferenceException: Object reference not set to an instance of an object. 
+0

_Но это не работает. Повреждена ли фланцевая скоба? Возможно, обработчик виджета не имеет правильного интерфейса? Или возникает какая-то другая ошибка? –

+0

Это ваш фактический код? Если это так, ваша проблема может заключаться в том, что вы пишете ключ, называемый «ключ», вместо использования переменной 'key'. – itsme86

+0

Вы упомянули попутно, что это сценарий WOW, поэтому предполагается перенаправление реестра. Вы также отмечаете, что хотите избежать перенаправления WOW, затем вы передаете 'RegistryView.Registry64' в OpenBaseKey, а затем некоторое возвращаемое значение равно null (вы на самом деле не указали, какая строка кода получает исключение ссылочной ссылки). Что вы пытаясь сделать здесь? Почему это сценарий «WOW»? Если вы дадите некоторые полезные детали, кто-то может вам помочь. – stuartd

ответ

1

Во-первых, «это не работает» Пожалуйста, вы можете описать любые сообщения об ошибках, ошибки исключения компилятора ?

Это сказанное ваш код

reg64key.SetValue("Key","ahsan"); 

Где вы будете видеть вы используете "Key" (в виде строки). Попытка изменить это.

reg64key.SetValue(key,"ahsan"); 

Таким образом, вы используете переменную вместо строки "Key"

EDIT: После того, как OP изменил

После ваших правок я пошел назад и попробовал это для себя. Пожалуйста, смотрите ниже код (это проверяется)

RegistryKey reg64key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
String key = @"SOFTWARE\Microsoft\ABCD"; 

if (reg64key == null) 
    throw new Exception("reg64key"); 

var basekey = reg64key.OpenSubKey(key); 
if (basekey == null) 
    basekey = reg64key.CreateSubKey(key); 

basekey.SetValue("Name", "ahsan"); 

Вы увидите из кода первое, что мы делаем это захватить reg64key для HKLM. Затем мы проверяем, что reg64key не является нулевым (не должен быть нулевым, но вы никогда не знаете). Затем мы используем reg64key, чтобы открыть ключ "SOFTWARE\Microsoft\ABCD". Если это не найдено (baseKey == null), тогда мы создаем ключ.

Наконец, вы можете установить ключ по своему усмотрению.

Надеюсь, что эта помощь.s

+0

Я описал ошибку. Также вопрос, который вы упомянули, хотя и вдумчивый, здесь не тот. Благодарю. – Ahsan

+0

Ahh, я вижу, вы редактировали вопрос. Я отредактировал ответ. Приветствия. – Nico

+0

Я вижу эту ошибку: Ошибка: System.UnauthorizedAccessException: Не удается записать в раздел реестра. на System.ThrowHelper.ThrowUnauthorizedAccessException (ExceptionResource ресурсов) на Microsoft.Win32.RegistryKey.EnsureWriteable() в Microsoft.Win32.RegistryKey.SetValue (имя String, Object, значение RegistryValueKind valueKind) в Microsoft.Win32.RegistryKey.SetValue (String name, Object value) – Ahsan

Смежные вопросы