2012-08-31 33 views
0

好吧,我试图拉一个注册表项,它不会工作,每次我尝试它拉空值。我尝试以管理员身份运行单个exe文件以仔细检查权限。我创建了一个执行相同功能的批处理文件,并且它工作正常,并且我也使用了相同的方法来在我的脚本的其他部分提取注册表值,并且似乎无法找到问题。该程序运行良好,并显示0错误。VB2010当我试图拉注册表项时出现空白

源代码:

' Check Auto Update settings 
     Dim AUOptions_Value = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update", "AUOptions", Nothing) 
     Dim AUOptions_level 
     If AUOptions_Value = 4 Then 
      AUOptions_level = "Auto Update Options set to: Install Updates Automatically." 
      Display_AUOptions.ForeColor = Color.Green 
     ElseIf AUOptions_Value = 3 Then 
      AUOptions_level = "Download Updates but let me choose whether to install them." 
      Display_AUOptions.ForeColor = Color.Blue 
     ElseIf AUOptions_Value = 2 Then 
      AUOptions_level = "Check for updates but let me choose whether to download them and install them." 
      Display_AUOptions.ForeColor = Color.Blue 
     ElseIf AUOptions_Value = 1 Then 
      AUOptions_level = "Never check for updates." 
      Display_AUOptions.ForeColor = Color.Red 
     Else 
      AUOptions_level = "Unable to detect settings" 
      Display_AUOptions.ForeColor = Color.Red 
     End If 
     Display_AUOptions.Text = AUOptions_level 
    End Sub 

注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update] 
"AUOptions"=dword:00000004 
+0

你作为构建32位在64位操作系统上的应用程序?如果是这样的话,你实际上会从'HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Wind ...'中读取这个密钥并检查 –

回答

0

我想你正在编译您的应用程序适用于x86和64位操作系统测试它。 在这种情况下,每次读取注册表都会被操作系统自动重定向到注册表的不同子树。请参见MSDN上32-bit and 64-bit Application Data in the Registry

操作系统改变这一

"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\" & _ 
"Windows\CurrentVersion\WindowsUpdate\Auto Update" 

注意你的注册表路径的OS是如何改变的子树添加Wow6432Node。这里存在你的问题,在64位操作系统中Wow6432Node内没有WindowsUpdate子项。 (这是正确的,因为这些设置是由64位操作系统管理)

解决您的问题,尝试编译为AnyCPUx64

+0

我拥有Visual Basic 2010的独立版本,你是如何将一个项目设置为AnyCPU ?我到处都可以找到说我必须安装整套西装,这是很愚蠢的... 另外我知道整个注册表的事情,我只是不认为VB2010是枪战开始改变我的价值观没有至少一些警告,这似乎是一个真正可怕的想法,默认构建选项应该保持代码不变,并按原样构建。 – user1451070

+0

我不知道这个命令是否可用于独立版本的操作系统。转到编译菜单,选择配置管理器,转到平台组合并选择AnyCPU。如果不存在,选择New并选择AnyCPU作为新平台。转到项目的属性并转到编译页面,将AnyCPU设置为平台(如果尚未设置)。 – Steve

相关问题