很久没写了,昨天用户反映一个问题。管理员用户安装软件之后,换用户登录,该软件无法使用,报空指针异常。检查源代码,发现出现空指针异常的地方需要访问注册表来获取软件安装目录。
第一次遇到这种问题,刚开始以为是用户权限的问题。给本机上所有用户开了所有权限之后,问题依然存在。查询inno setup相关打包脚本。最终发现问题出在
[registry]
Root:HKCU;Subkey:SOFTW\XXX;ValueType: string; ValueName:XXXXX;ValueData:{app};Flags: uninsdeletevalue
参数 | 说明 |
Root | 根键。必须是下列中的一个: HKCR (HKEY_CLASSES_ROOT) HKCU (HKEY_CURRENT_USER) HKLM (HKEY_LOCAL_MACHINE) HKU (HKEY_USERS) HKCC (HKEY_CURRENT_CONFIG) |
Subkey | 子键名,可以包含常量 |
ValueType | 值类型,必须是下列中的一个: none string expandsz multisz dword binary 如果指定了none (默认设置),安装程序将创建一个没有键值的键,在这种情况下,ValueName 和ValueData 参数将被忽略。 |
ValueName | 要创建的值名,可以包含常量,如果是空白的,将写入到“默认”值 |
ValueData | 值的数据 |
Permissions | 指定登录注册表键ACL (访问控制列表) 的附加权限,该参数只在Windows 2000 或更高版本中有效,可用的参数是full、modify和read |
Flags | 是额外选项设置。多个选项可以使用空格隔开。支持下面的选项: createvalueifdoesntexist deletekey deletevalue dontcreatekey noerror preservestringtype uninsclearvalue uninsdeletekey uninsdeletekeyifempty uninsdeletevalue |
HKCU对应的是CURRENT USER,因此只对当前用户有效。改为:HKLM后重新打包。安装软件后发现在HKEY_LOCAL_MACHINE->SOFTWARE下面找不到XXX,继续查找原因。发现这个XXX写在了HKEY_LOCAL_MACHINE->SOFTWARE->WOW6432Node->XXX里。这个和64位操作系统或32位操作系统有关。具体我也说不清楚,总之,问题得到了解决。此为记!感谢杨果同学耐心帮我测试!