杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2000|回复: 1

根据系统位宽(x86 or x64)设置安装目录

[复制链接]
发表于 2017-2-23 20:40:23 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Share 于 2017-2-23 20:46 编辑

用于制作x64&x86软件的双版合一安装包,根据系统位宽自动释放文件到Program Files或Program Files (x86)下!以下仅示例脚本结构:
  1. !define PRODUCT_NAME "AppName"
  2. !define PRODUCT_VERSION "1.0.0.0"
  3. !define PRODUCT_DIR_REGKEY "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"
  4. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  5. !define PRODUCT_UNINST_ROOT_KEY "HKLM"

  6. # 需要引入的nsh脚本
  7. !include "x64.nsh"

  8. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
  9. OutFile "${PRODUCT_NAME}_${PRODUCT_VERSION}_setup.exe"
  10. InstallDirRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
  11. # 这里不用定义下面的“InstallDir”
  12. # InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"

  13. Section "Test" Test
  14.     SetOutPath "$INSTDIR"
  15. SectionEnd

  16. Function .onInit
  17.     # 安装目录设置
  18.     ${If} ${RunningX64}
  19.     StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}"
  20.     ${else}
  21.     StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT_NAME}"
  22.     ${EndIf}
  23. FunctionEnd
复制代码


当然,这脚本会强制安装到64位,而在32为系统中则无法运行。其实,更简单的办法就是 InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"

回复

使用道具 举报

 楼主| 发表于 2017-2-23 20:47:42 | 显示全部楼层

RE: 根据系统位宽(x86 or x64)设置安装目录


  1. !define PRODUCT_NAME "AppName"
  2. !define PRODUCT_VERSION "1.0.0.0"
  3. !define PRODUCT_DIR_REGKEY "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"
  4. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  5. !define PRODUCT_UNINST_ROOT_KEY "HKLM"

  6. # 需要引入的nsh脚本
  7. !include "x64.nsh"

  8. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
  9. OutFile "${PRODUCT_NAME}_${PRODUCT_VERSION}_setup.exe"

  10. Section "Test" Test
  11.     # 64位释放到\Windows\SysWOW64;32位释放到\Windows\System32
  12.     ${If} ${RunningX64}
  13.     SetOutPath "$WINDIR\SysWOW64"
  14.     ${else}
  15.     SetOutPath "$WINDIR\System32"
  16.     ${EndIf}
  17. SectionEnd
复制代码


默认情况下windows系统会自动进行转向,所以$SYSDIR变量
在32位系统中是C:\Windows\System32
在64位系统中是C:\Windows\SysWOW64
如果不想进行转向,需要禁止转向
System::Call kernel32::Wow64EnableWow64FsRedirection(i0) ;禁止文件转向
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-18 03:08 , Processed in 0.104130 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表