Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在NSIS脚本中定义多个目录变量?_Nsis - Fatal编程技术网

如何在NSIS脚本中定义多个目录变量?

如何在NSIS脚本中定义多个目录变量?,nsis,Nsis,请注意,我创建了一个变量,但没有出现上述问题,但当我尝试创建第二个变量时,出现以下错误: !define: "MUI_DIRECTORYPAGE_VARIABLE" already defined! 以下是我对单个变量的设置: Var HW_DATA_DIR !define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR // ... !define HW_DATA "HW-Data" ## This is the ti

请注意,我创建了一个变量,但没有出现上述问题,但当我尝试创建第二个变量时,出现以下错误:

!define: "MUI_DIRECTORYPAGE_VARIABLE" already defined!
以下是我对单个变量的设置:

Var HW_DATA_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
// ...
!define HW_DATA "HW-Data"

## This is the title on the MyApp Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"

;Directory for App files and where config.dat will point to
!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW dir_pre   
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

LangString MUI_DIRECTORYPAGE_TEXT_TOP_HW ${LANG_ENGLSH} "Setup will install \
${HW_DATA} in the following folder..."

## Sections Group 0
Function wel_pre
  StrCpy $APP_DIR "C:\${HW_DATA}"
     strcmp '$0' '1' noabort
     messagebox mb_yesno|mb_defbutton2|mb_iconquestion "Leave MyApp directories at default values of C:\${HW_DATA} and C:\${HW_WORKSPACE}?" idno noabort
     strcpy $0 2
     abort
   noabort:
     strcpy $0 1             
Functionend

Function dir_pre
     GetDlgItem $1 $HWNDPARENT 1037
     CreateFont $2 "$(^Font)" "8" "700"
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'

     GetDlgItem $1 $HWNDPARENT 1038
     CreateFont $2 "$(^Font)" "8" ""
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'                       
Functionend

!define PROG0_InstDir    "C:\${HW_DATA}"
!define PROG0_StartIndex ${PROG0}
!define PROG0_EndIndex   ${SEC0} 

SectionGroup /e "MyApp" PROG0 
Section "Main" SEC0
    CreateDirectory "$HW_DATA"
    CreateDirectory "$HW_DATA\Plugins"
    CreateDirectory "$HW_DATA\Plugins\ComputePlugin"
    CreateDirectory "$HW_DATA\Plugins\ExtensionPlugin"                                       

    File /oname=$HW_DATA\Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
    File /oname=$HW_DATA\Plugins\ExtensionPlugin\hwProxyInterface.MyProApp.dll hwProxyInterface.MyProApp.dll   
SectionEnd
Var HW_DATA_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
Var HW_WORKSPACE_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_WORKSPACE_DIR
// ...
!define HW_DATA "HW-Data"
!define HW_WORKSPACE "HW-Workspaces"  

## This is the title on the MyApp Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"

;Directory for MyApp files and where config.dat will point to
!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW dir_pre   
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

// ...

LangString MUI_DIRECTORYPAGE_TEXT_TOP_HW ${LANG_ENGLSH} "Setup will install \
${HW_DATA} in the following folder..."

## Sections Group 0
Function wel_pre
  StrCpy $HW_DATA_DIR "C:\${HW_DATA}" 
  StrCpy $$HW_WORKSPACE_DIR "C:\${HW_WORKSPACE}"  
     strcmp '$0' '1' noabort
     messagebox mb_yesno|mb_defbutton2|mb_iconquestion "Leave Headwave directories at default values of C:\${HW_DATA} and C:\${HW_WORKSPACE}?" idno noabort
     strcpy $0 2
     abort
   noabort:
     strcpy $0 1             
Functionend

Function dir_pre
     GetDlgItem $1 $HWNDPARENT 1037
     CreateFont $2 "$(^Font)" "8" "700"
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'

     GetDlgItem $1 $HWNDPARENT 1038
     CreateFont $2 "$(^Font)" "8" ""
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'                       
Functionend

!define PROG0_InstDir    "C:\${HW_DATA}"
!define PROG0_StartIndex ${PROG0}
!define PROG0_EndIndex   ${SEC0} 

SectionGroup /e "MyApp" PROG0 
Section "Main" SEC0
    CreateDirectory "$HW_DATA"
    CreateDirectory "$HW_DATA\Plugins"
    CreateDirectory "$HW_DATA\Plugins\ComputePlugin"
    CreateDirectory "$HW_DATA\Plugins\ExtensionPlugin"                                       

    File /oname=$HW_DATA\Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
    File /oname=$HW_DATA\Plugins\ExtensionPlugin\hwProxyInterface.MyProApp.dll hwProxyInterface.MyProApp.dll   

    CreateDirectory "$HW_WORKSPACE_DIR"  
SectionEnd
这就是我试图添加第二个变量的方式:

Var HW_DATA_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
// ...
!define HW_DATA "HW-Data"

## This is the title on the MyApp Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"

;Directory for App files and where config.dat will point to
!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW dir_pre   
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

LangString MUI_DIRECTORYPAGE_TEXT_TOP_HW ${LANG_ENGLSH} "Setup will install \
${HW_DATA} in the following folder..."

## Sections Group 0
Function wel_pre
  StrCpy $APP_DIR "C:\${HW_DATA}"
     strcmp '$0' '1' noabort
     messagebox mb_yesno|mb_defbutton2|mb_iconquestion "Leave MyApp directories at default values of C:\${HW_DATA} and C:\${HW_WORKSPACE}?" idno noabort
     strcpy $0 2
     abort
   noabort:
     strcpy $0 1             
Functionend

Function dir_pre
     GetDlgItem $1 $HWNDPARENT 1037
     CreateFont $2 "$(^Font)" "8" "700"
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'

     GetDlgItem $1 $HWNDPARENT 1038
     CreateFont $2 "$(^Font)" "8" ""
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'                       
Functionend

!define PROG0_InstDir    "C:\${HW_DATA}"
!define PROG0_StartIndex ${PROG0}
!define PROG0_EndIndex   ${SEC0} 

SectionGroup /e "MyApp" PROG0 
Section "Main" SEC0
    CreateDirectory "$HW_DATA"
    CreateDirectory "$HW_DATA\Plugins"
    CreateDirectory "$HW_DATA\Plugins\ComputePlugin"
    CreateDirectory "$HW_DATA\Plugins\ExtensionPlugin"                                       

    File /oname=$HW_DATA\Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
    File /oname=$HW_DATA\Plugins\ExtensionPlugin\hwProxyInterface.MyProApp.dll hwProxyInterface.MyProApp.dll   
SectionEnd
Var HW_DATA_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
Var HW_WORKSPACE_DIR
!define MUI_DIRECTORYPAGE_VARIABLE $HW_WORKSPACE_DIR
// ...
!define HW_DATA "HW-Data"
!define HW_WORKSPACE "HW-Workspaces"  

## This is the title on the MyApp Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"

;Directory for MyApp files and where config.dat will point to
!define MUI_PAGE_CUSTOMFUNCTION_PRE wel_pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW dir_pre   
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

// ...

LangString MUI_DIRECTORYPAGE_TEXT_TOP_HW ${LANG_ENGLSH} "Setup will install \
${HW_DATA} in the following folder..."

## Sections Group 0
Function wel_pre
  StrCpy $HW_DATA_DIR "C:\${HW_DATA}" 
  StrCpy $$HW_WORKSPACE_DIR "C:\${HW_WORKSPACE}"  
     strcmp '$0' '1' noabort
     messagebox mb_yesno|mb_defbutton2|mb_iconquestion "Leave Headwave directories at default values of C:\${HW_DATA} and C:\${HW_WORKSPACE}?" idno noabort
     strcpy $0 2
     abort
   noabort:
     strcpy $0 1             
Functionend

Function dir_pre
     GetDlgItem $1 $HWNDPARENT 1037
     CreateFont $2 "$(^Font)" "8" "700"
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'

     GetDlgItem $1 $HWNDPARENT 1038
     CreateFont $2 "$(^Font)" "8" ""
     SendMessage $1 ${WM_SETFONT} $2 0
     SetCtlColors $1  '0x000000' '0xFFFFFF'                       
Functionend

!define PROG0_InstDir    "C:\${HW_DATA}"
!define PROG0_StartIndex ${PROG0}
!define PROG0_EndIndex   ${SEC0} 

SectionGroup /e "MyApp" PROG0 
Section "Main" SEC0
    CreateDirectory "$HW_DATA"
    CreateDirectory "$HW_DATA\Plugins"
    CreateDirectory "$HW_DATA\Plugins\ComputePlugin"
    CreateDirectory "$HW_DATA\Plugins\ExtensionPlugin"                                       

    File /oname=$HW_DATA\Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
    File /oname=$HW_DATA\Plugins\ExtensionPlugin\hwProxyInterface.MyProApp.dll hwProxyInterface.MyProApp.dll   

    CreateDirectory "$HW_WORKSPACE_DIR"  
SectionEnd
另见


有人有什么建议吗?在我的例子中,我恰好需要为特定的应用程序创建一个数据目录和一个工作区目录,使用默认值,但也允许用户将数据目录和工作区目录更改为自定义目录,以防它们需要位于网络驱动器上,而不是位于默认的
C:\
驱动器上。TIA。

目录变量define是一个每页设置,必须在页面宏之前设置:

Var foo
Var bar
!define MUI_DIRECTORYPAGE_VARIABLE $foo
insertmacro MUI_PAGE_DIRECTORY
!define MUI_DIRECTORYPAGE_VARIABLE $bar
!insertmacro MUI_PAGE_DIRECTORY

我不建议使用两个InstFiles页面。为什么不建议使用两个InstFiles页面?手动分区管理可能会变得一团糟。它没有任何技术问题,你只需要让你的逻辑正确。