2016-12-01 38 views
0

我正在研究一个C#项目,我对创建注册表项非常困惑。以编程方式创建注册表项

我有一个Wix安装程序。和设置文件,我打电话给一个自定义操作来创建子密钥(我尝试了wix功能,但它没有工作)。

我的自定义操作是:安装

RegistryKey Nkey = Registry.LocalMachine; 
RegistryKey valkey = Nkey.OpenSubKey(Manager.REGKEY, true); //=> REGKEY = "Software\\MyService" 
if (valkey == null) 
{ 
    valkey = Nkey.CreateSubKey(GestionCertificats.REGKEY); 
} 
valkey.Close(); 

Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\services\eventlog\Application\MyService"); 

后,我可以看到第二个关键,但没有第一个。我不确定要正确理解按键的操作。我正在研究Windows 7 64位,我正在编译“任何CPU”,但我的应用程序似乎在x86中。

我已尝试调试该操作。值valkey不为空,但我没有看到注册表中的密钥。通过强制CreateSubKey我还没有钥匙。

我不知道该怎么做,我需要帮助。

+0

您需要管理员权限才能写入LocalMachine。你是否以正确的权限运行安装程序? – ChrisF

+0

是的,我有窗户要求授权。我有另一个自定义操作用于写在一个正在工作的管理文件夹中。 –

+0

我认为你应该在路径中使用\\而不仅仅是\? –

回答

1

只是一个猜测,因为一切都看起来没问题。

尝试关闭返回的密钥。关于清除资源的密钥处理的描述,但并未说明它会刷新资源。

RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SYSTEM\CurrentControlSet\services\eventlog\Application\MyService"); 
key.Close(); 
+0

这是基本32/64之间的问题。通过:注册表键值= RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,Environment.Is64BitOperatingSystem?RegistryView.Registry64:RegistryView.Registry32);'和它的工作原理你是唯一回答,我把你的答案;-) –