Installation 更改NSIS中的默认安装文件夹
我正在使用nsis为windows编写安装程序。此安装程序包含一个在xampp之上运行的web应用程序,因此xampp也作为服务安装在此应用程序中。但当xamp安装在Windows 7上的64位计算机上时,它会出现一个问题。这是由于此处提到的C:\Program Files(x86)中的目录路径问题造成的 但目前自动安装路径在安装程序中设置如下Installation 更改NSIS中的默认安装文件夹,installation,nsis,windows-7-x64,Installation,Nsis,Windows 7 X64,我正在使用nsis为windows编写安装程序。此安装程序包含一个在xampp之上运行的web应用程序,因此xampp也作为服务安装在此应用程序中。但当xamp安装在Windows 7上的64位计算机上时,它会出现一个问题。这是由于此处提到的C:\Program Files(x86)中的目录路径问题造成的 但目前自动安装路径在安装程序中设置如下 C:\Program Files (x86)\myapplication 安装程序脚本只有以下宏来添加目录选择器页面 !insertmacro MU
C:\Program Files (x86)\myapplication
安装程序脚本只有以下宏来添加目录选择器页面
!insertmacro MUI_PAGE_DIRECTORY
作为解决方案,我要做的是以下操作
$INSTDIR
及
有人能帮我解决这个问题吗?在win7/64上,可以通过
%ProgramW6432%
环境变量从32位应用程序获取64位程序文件
您可以尝试使用ReadEnvStr
获取它:
- 在32位系统上,它将返回一个空字符串
- 在64位系统上,它将返回
(如果未在别处配置)c:\program files
ReadEnvStr $0 ProgramW6432
StrCmp $0 "" 0 +3
MessageBox MB_OK "it is a 32b system"
goto +2
MessageBox MB_OK "it is a 64b system"
在您的情况下,它可以:
ReadEnvStr $0 ProgramW6432
StrCmp $0 "" +2 0
StrCpy $INSTDIR $0
编辑:对于拒绝程序文件(x86)
的点,您可以使用Anders为提供的。onVerifyInstDir
回调方法,它将在用户选择时检查choosen目录,然后更改页面:
Function .onVerifyInstDir
ReadEnvStr $0 "ProgramFiles(x86)"
StrCmp $0 $INSTDIR 0 PathGood
MessageBox MB_OK "directory not valid for installation"
Abort
PathGood:
FunctionEnd
在这里,我使用另一个环境变量来获取程序文件的(x86)变体。NSIS提供$PROGRAMFILES32和$PROGRAMFILES64:
InstallDir "$PROGRAMFILES64\myapp"
这很好,适用于默认路径场景。但是,如果用户手动将目录更改为“C:\ProgramFiles(x86)”该怎么办。这并不能解决当时的问题。你能为那个实例指定一个解决方案吗?对不起,我一定是读得太快了。您想在用户选择目录以拒绝包含“(x86)”的任何文件夹后进行检查吗?如果是,我想我有一个解决方案,我会更新我的答案。感谢Anders和Seki遵循您以前的一个答案。如果使用CPACK,此变量设置为:set(CPACK\u NSIS\u INSTALL\u ROOT“$PROGRAMFILES64”)