Function Check32or64BitWindows
${If} ${RunningX64}
strcpy $INSTDIR "$PROGRAMFILES64\${APP_FULL_PATH}"
SetRegView 64
${Else}
SetRegView 32
strcpy $INSTDIR "$PROGRAMFILES32\${APP_FULL_PATH}"
${EndIf}
FunctionEnd
如果检测到旧版本,那么我执行
ExecWait '"$INSTDIR\uninst.exe" /S' $0
我的卸载部分:
Section uninstall
!define APP_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_VENDOR} ${APP_NAME}"
!define APP_UNINST_ROOT_KEY "HKLM"
DeleteRegKey ${APP_UNINST_ROOT_KEY} "${APP_UNINST_KEY}"
SectionEnd
Section -Post
WriteRegStr ${APP_UNINST_ROOT_KEY} "${APP_UNINST_KEY}" "DisplayName" "${APP_FULL_NAME}"
SectionEnd
发布部分在 Windows 64 位注册表视图中创建注册表项,但卸载程序不会删除该注册表项。
如果我删除对 64 位操作系统的检查,则在 Wow6432Node 中创建和删除注册表可以正常工作。
如果您不安装 x64 应用程序,则根本不应该使用 SetRegView/$PROGRAMFILES64。
如果您正在安装 x64 应用程序并调用SetRegView 64
在安装过程中你还必须调用SetRegView 64
在卸载程序中。
Use 过程监控器 http://technet.microsoft.com/en-us/sysinternals/bb896645调查其他注册表问题...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)