2012-05-04 133 views
3

我正在使用nsis编写windows安装程序。此安装程序包含一个运行在xampp上的Web应用程序,因此xampp也作为此应用程序的服务安装。但是xamp在Windows 7的64位计算机上安装时会出现问题。这是由于C:\ Program Files(x86)中的目录路径问题,如此处所述。更改NSIS中的默认安装文件夹

XAMPP Error Solution? I have that installed on my Windows XP Dual Boot Machine

但是目前在安装程序如下的自动安装路径设置。

C:\Program Files (x86)\myapplication 

安装程序脚本只有以下宏来添加目录选择器页面。

!insertmacro MUI_PAGE_DIRECTORY 

作为一种解决方案,我要做的是以下操作。

  1. 更改默认目录为C:\ Program Files文件
  2. 如果用户选择x86文件夹给出错误信息,以选择其他目录。

为此,我需要通过

$INSTDIR 

  1. 检查,以获取安装目录路径是否存在的x86与路径的子字符串
  2. 如果这样就给错误消息。
  3. 更改默认路径C:\ Program Files文件

由于我没有太多熟悉NSIS我无法编写这个程序。

有人可以帮我解决这个问题吗?

回答

3

在win7/64上,可通过%ProgramW6432%环境变量从32位应用程序获取64位程序文件。32位系统上

  • 它会在64位系统将返回c:\program files上返回一个空字符串
  • (如果其他地方没有配置)

你可以尝试用ReadEnvStr得到它

下面是测试它的一个片段:

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 

编辑:对于拒绝Program Files (x86)你可以使用由安德斯为another question给出的.onVerifyInstDir回调方法来看,它会检查选定的目录中,因为它是由用户改变页面之前选择:

Function .onVerifyInstDir 
    ReadEnvStr $0 "ProgramFiles(x86)" 
    StrCmp $0 $INSTDIR 0 PathGood 
    MessageBox MB_OK "directory not valid for installation" 
    Abort 
PathGood: 
FunctionEnd 

在这里,我用另一个环境变量来获取程序文件的(x86)的变种。

+0

这是伟大的,与默认路径场景的作品。但是,如果用户手动将目录更改为“C:\ Program Files(x86)”会怎么样?这在当时并不能解决问题。你能为那个实例指定一个解决方案吗? – Thilanka

+0

对不起,我一定很快就读过你的问题。您想在用户选择目录拒绝任何包含“(x86)”的文件夹后进行检查?如果是,我想我有一个解决方案,我会更新我的答案。 – Seki

7

NSIS提供$ PROGRAMFILES32和$ PROGRAMFILES64:

InstallDir "$PROGRAMFILES64\myapp" 
+0

谢谢Anders和Seki正在关注你之前的答案之一。 – Thilanka

+0

如果使用CPACK,该变量设置为:\t SET(CPACK_NSIS_INSTALL_ROOT“$ PROGRAMFILES64”) – Pierluigi