2012-12-17 196 views
1

在Windows 7/64位计算机上,NSIS功能WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\" "blah" "blah"不起作用。WriteRegStr HKLM:跨Windows平台解决方案

从我的理解,以得到它的工作的唯一方法是做到这一点:WriteRegStr HKLM "Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" "blah" "blah"

我是正确,这是写入到本地计算机的注册表在Windows 7/64位计算机的唯一途径?

是否有可以写入本地机器注册表的跨平台方式/函数?

是我唯一的选择是这样的......

!macro WriteRegStrLocalMachine path regName regValue 

    WriteRegStr HKLM "SOFTWARE\WOW6432Node\${path}" "${regName}" "${regValue}" 
    WriteRegStr HKLM "SOFTWARE\${path}" "${regName}" "${regValue}" 
!macroend 

!macro ReadRegStrLocalMachine path regName regValue 

    ReadRegStr $1 HKLM "SOFTWARE\WOW6432Node\${path}" "${regName}" 
    ReadRegStr $2 HKLM "SOFTWARE\WOW6432Node\${path}" "${regName}" 

    # TODO: Check if $1 or $2 contain data 
!macroend 
+0

WOW6432Node访问无论是64B或32B是32个应用程序安装在64位操作系统上。您应该根据安装的应用程序是32位还是64位来读取/写入正确的路径。 –

+0

@FranciscoR我不确定你的意思,但是如果你在64位计算机上调用函数WriteRegStr HKLM“Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \”“blah”“blah”,你将看到注册表从不写入。我不认为它与我正在安装的内容有任何关系,它只是不会出现在注册表中,无论如何 –

+0

您必须以管理用户身份运行安装程序,以便能够在Vista或更高版本中写入HKLM(或HKCU) (或者在XP上,如果当前用户不是高级用户)。 –

回答

2

我是正确,这是写在Windows 7/64位计算机上的本地计算机的注册表的唯一途径?

错误:与NSIS(这是一个32B的应用程序,直到下一个版本 - 目前是2.46),您可以选择使用SetRegView

相关问题