当我添加自定义 nsDialog 页面时,为什么我的 NSIS 脚本似乎会跳过 MUI_PAGE_INSTFILES 这样的安装页面?
Why does my NSIS script appear to be skipping over installation pages like MUI_PAGE_INSTFILES when I add custom nsDialog pages?
这是我最新的 NSIS 安装脚本,它已经长成了一个野兽。
我的问题是,如何将 HW_DATA_DIR
、HW_WORKSPACE_DIR
和 %HEADWAVE_ROOT_DIR%
的所有部分放入一个页面中?我猜我将不得不以某种方式使用 nsDialog 。我的主管希望我这样做,因为有太多单独的安装页面,您必须不断点击并点击太多次才能完成安装。
我已经尝试了以下方法,但是在函数中添加一个 nsDialog
就像 Page custom HeadwaveConfiguration
那样似乎不适合程序流程。这是我的代码修改:
Var headwaveConfigDialog
Var headwaveConfigDataDirLabel
Var headwaveConfigDataDirText
Var headwaveConfigWkDirLabel
Var headwaveConfigWkDirText
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesCheck
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsLeave
!insertmacro MUI_PAGE_COMPONENTS
## This is the title on the Headwave Data Directory page
;!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"
;!define MUI_PAGE_HEADER_TEXT "Headwave configuration"
; !define MUI_PAGE_HEADER_SUBTEXT "Select the folder which Headwave can use as a data storage."
Page custom HeadwaveConfiguration
; ; HW Data
; !define MUI_PAGE_CUSTOMFUNCTION_PRE hw_data_pre
; !define MUI_PAGE_CUSTOMFUNCTION_SHOW hw_data_dir
; !define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
; !insertmacro MUI_PAGE_DIRECTORY
; ## This is the title on the Headwave Workspace Directory page
; !define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_WK)"
; !define MUI_PAGE_HEADER_TEXT "Choose Headwave Workspace directory"
; !define MUI_PAGE_HEADER_SUBTEXT "Select the folder which Headwave can use as a workspace."
; # HW Workspaces
; !define MUI_PAGE_CUSTOMFUNCTION_PRE hw_wk_pre
; !define MUI_PAGE_CUSTOMFUNCTION_SHOW hw_wk_dir
; !define MUI_DIRECTORYPAGE_VARIABLE $HW_WORKSPACE_DIR
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
## This is the title on the Headwave installation Directory page to obtain directory for %HEADWAVE_ROOT_DIR
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_INST)"
!define MUI_PAGE_HEADER_TEXT "Choose Headwave Plugin installation directory"
!define MUI_PAGE_HEADER_SUBTEXT "Select the folder where Headwave is presently installed to set environment variable."
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesHeadwaveProg
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
; ...
Function HeadwaveConfiguration
!insertmacro MUI_HEADER_TEXT "Headwave configuration" "Select the respective folders for Headwave."
nsDialogs::Create 1018
Pop $headwaveConfigDialog
${NSD_CreateLabel} 0 0 100% 12u "Select the folder which Headwave can use as a data storage:"
Pop $headwaveConfigDataDirLabel
${NSD_CreateText} 10% 20u 80% 12u "C:\HW-Data"
Pop $headwaveConfigDataDirText
StrCpy $HW_DATA_DIR $headwaveConfigDataDirText
${NSD_CreateLabel} 0 40u 80% 12u "Select the folder which Headwave can use as a workspace:"
Pop $headwaveConfigWkDirLabel
${NSD_CreateText} 10% 60u 80% 12u "C:\HW-Workspaces"
Pop $headwaveConfigWkDirText
StrCpy $HW_WORKSPACE_DIR $headwaveConfigWkDirText
;${NSD_CreateLabel} 0 80u 80% 12u "Select the folder where Headwave is installed:"
;Pop $headwaveConfigProgramDirLabel
;StrCpy $headwaveConfigProgramDirText $HeadwaveInstallDir
;${NSD_CreateText} 10% 100u 80% 12u $HeadwaveInstallDir
;Pop $headwaveConfigProgramDirText
;StrCpy $HeadwaveInstallDir $headwaveConfigProgramDirText
;MessageBox MB_OK 'HeadwaveConfiguration: HeadwaveInstallDir = $HeadwaveInstallDir; headwaveConfigProgramDirText = $headwaveConfigProgramDirText'
SetCtlColors $headwaveConfigHwnd 0xFF0000 0xFFFFFF
nsDialogs::Show
FunctionEnd
但问题是 HeadwaveConfiguration nsDialog
页面获得获取 HW_DATA_DIR
和 HW_WORKSPACE_DIR
的调用,但它只是跳转到开始安装 MyApp
而不是首先安装 Headwave 组件,然后继续安装 MyApp
有人有什么建议吗? TIA.
更新:
这是我更新代码的方式,但它在跳转到 MyApp 安装页面之前仍然没有安装 Headwave 组件:
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesCheck
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsLeave
!insertmacro MUI_PAGE_COMPONENTS
## This is the title on the Headwave Data Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"
!define MUI_PAGE_HEADER_TEXT "Headwave configuration"
!define MUI_PAGE_CUSTOMFUNCTION_PRE HeadwaveConfigurationPre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW HeadwaveConfigurationShow
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
## This is the title on the Headwave installation Directory page to obtain directory for %HEADWAVE_ROOT_DIR%
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_INST)"
!define MUI_PAGE_HEADER_TEXT "Choose Headwave Plugin installation directory"
!define MUI_PAGE_HEADER_SUBTEXT "Select the folder where Headwave is presently installed to set environment variable."
Function HeadwaveConfigurationPre
!insertmacro MUI_HEADER_TEXT "Headwave configuration" "Select the respective folders for Headwave."
nsDialogs::Create 1018
Pop $headwaveConfigDialog
${NSD_CreateLabel} 0 0 100% 12u "Select the folder which Headwave can use as a data storage:"
Pop $headwaveConfigDataDirLabel
${NSD_CreateText} 10% 20u 80% 12u "C:\HW-Data"
Pop $headwaveConfigDataDirText
StrCpy $HwDataDir $headwaveConfigDataDirText
${NSD_CreateLabel} 0 40u 80% 12u "Select the folder which Headwave can use as a workspace:"
Pop $headwaveConfigWkDirLabel
${NSD_CreateText} 10% 60u 80% 12u "C:\HW-Workspaces"
Pop $headwaveConfigWkDirText
StrCpy $HwWorkspaceDir $headwaveConfigWkDirText
;${NSD_CreateLabel} 0 80u 80% 12u "Select the folder where Headwave is installed:"
;Pop $headwaveConfigProgramDirLabel
;StrCpy $headwaveConfigProgramDirText $HeadwaveInstallDir
;${NSD_CreateText} 10% 100u 80% 12u $HeadwaveInstallDir
;Pop $headwaveConfigProgramDirText
;StrCpy $HeadwaveInstallDir $headwaveConfigProgramDirText
SetCtlColors $headwaveConfigHwnd 0xFF0000 0xFFFFFF
nsDialogs::Show
FunctionEnd
Function HeadwaveConfigurationShow
MessageBox MB_OK 'HeadwaveConfiguration: HeadwaveInstallDir = $HeadwaveInstallDir; headwaveConfigProgramDirText = $headwaveConfigProgramDirText'
FunctionEnd
## Section 1
Section "MyPartnerApp Plugin" SEC1
MessageBox MB_OK 'Headwave Plugin #1: INSTDIR = $INSTDIR'
${If} ${SectionIsSelected} ${SEC1}
${StrContains} [=12=] "MyPartnerApp" "$INSTDIR"
StrCmp [=12=] "" notfoundMyPartnerApp
Goto doneMyPartnerApp
doneMyPartnerApp:
MessageBox MB_OK 'Headwave Plugin #2: HW_DATA_DIR = $HW_DATA_DIR'
SetOutPath "$HW_DATA_DIR"
${StrContains} [=12=] "Data" "$HW_DATA_DIR"
StrCmp [=12=] "" notfoundHwData
Goto doneHwData
;MessageBox MB_OK 'Did not find MyApp string'
doneHwData:
##All the files in Group 0 will be installed to the same location, $HW_DATA_DIR
MessageBox MB_OK 'Headwave Plugin #3: HW_DATA_DIR = $HW_DATA_DIR'
SetOutPath "$HW_DATA_DIR"
CreateDirectory "$HW_DATA_DIR"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins\ComputePlugin"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins\ExtensionPlugin"
File /oname=$HW_DATA_DIR\MyApp-Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
File /oname=$HW_DATA_DIR\MyApp-Plugins\ComputePlugin\computeplugin.VirtualVolume.dll computeplugin.VirtualVolume.dll
File /oname=$HW_DATA_DIR\MyApp-Plugins\ExtensionPlugin\hwProxyInterface.MyApp.dll hwProxyInterface.MyApp.dll
# MyPartnerApp workspace
CreateDirectory "$HW_WORKSPACE_DIR"
##All the files in Group 1 will be installed to the same location, $INSTDIR
SetOutPath "$INSTDIR"
;messagebox mb_ok "MyPartnerApp Program: INSTDIR is $INSTDIR"
# set environment variable for current user
WriteRegExpandStr ${env_hkcu} HEADWAVE_ROOT_DIR $INSTDIR
# save the selected headwave program directory
StrCpy $MyPartnerAppSelectedInstallDir $INSTDIR
# make sure windows knows about the change
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
# Install Sound-MyApp python scripts
CreateDirectory $INSTDIR\python\hwtoolkits\MyCompany
File __init__.py
File MyAppConfig.py
File MyAppPlugin.py
CopyFiles $INSTDIR\*.py $INSTDIR\python\hwtoolkits\MyCompany
notfoundHwData:
notfoundMyPartnerApp:
; Do nothing
${Else}
Abort
${EndIf}
SectionEnd
我本以为应该首先调用 HeadwaveConfigurationPre,因此 $HW_DATA_DIR
应该是 C:\HW-Data
,但我添加的消息框之一显示如下:
Headwave Plugin #2: HW_DATA_DIR = 6494062
更新 2:
感谢@Anders 的反馈。
这是我最新的代码,最初它获取 $HwDataDir
和 $HwWorkspaceDir
的值:
https://pastebin.com/VsT0MJf1
注意: 我之前只在 https://pastebin.com/DJTLQ05D
中粘贴了部分代码
这是一个显示初始获取值的对话框:
接下来进入插件安装页面:
但最终,它到达了这行代码:
MessageBox MB_OK 'Headwave Plugin #2: HwDataDir = $HwDataDir'
在这种情况下 $HwDataDir
又有一个数字:
你能告诉我,那是怎么发生的吗?为什么值会从 C:\HW-Data
变为 1181026? TIA.
您不能将 MUI_PAGE_CUSTOMFUNCTION_* 与 nsDialogs 一起使用。在上次更新中 $HwDataDir 包含一个数字,因为它是文本控件的句柄,而不是它的文本。即使您在错误的时间要求它的文本,您也应该在离开回调中这样做。自定义页面只有create和leave回调,没有pre和show!
以下是 nsDialogs 文档中的部分示例代码:
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
Pop $Label
${NSD_CreateText} 0 13u 100% -13u "Type something here..."
Pop $Text
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetText} $Text [=10=]
MessageBox MB_OK "You typed:$\n$\n[=10=]"
FunctionEnd
您的代码包含其他问题,例如
Section "MyPartnerApp Plugin" SEC1
${If} ${SectionIsSelected} ${SEC1}
这没有意义,你不能那样检查自己。 IsPROG0HwDataSelected 函数已损坏,您应该使用 ${If} 和适当的部分索引从头开始重写它。
更新 2:
在您的新代码中,StrCpy $HwDataDir $headwaveConfigDataDirText
是句柄“损坏”的地方。你不需要 StrCpy,你在 leave 函数中需要的只是 ${NSD_GetText} $headwaveConfigDataDirText $HwDataDir
.
这是我最新的 NSIS 安装脚本,它已经长成了一个野兽。
我的问题是,如何将 HW_DATA_DIR
、HW_WORKSPACE_DIR
和 %HEADWAVE_ROOT_DIR%
的所有部分放入一个页面中?我猜我将不得不以某种方式使用 nsDialog 。我的主管希望我这样做,因为有太多单独的安装页面,您必须不断点击并点击太多次才能完成安装。
我已经尝试了以下方法,但是在函数中添加一个 nsDialog
就像 Page custom HeadwaveConfiguration
那样似乎不适合程序流程。这是我的代码修改:
Var headwaveConfigDialog
Var headwaveConfigDataDirLabel
Var headwaveConfigDataDirText
Var headwaveConfigWkDirLabel
Var headwaveConfigWkDirText
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesCheck
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsLeave
!insertmacro MUI_PAGE_COMPONENTS
## This is the title on the Headwave Data Directory page
;!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"
;!define MUI_PAGE_HEADER_TEXT "Headwave configuration"
; !define MUI_PAGE_HEADER_SUBTEXT "Select the folder which Headwave can use as a data storage."
Page custom HeadwaveConfiguration
; ; HW Data
; !define MUI_PAGE_CUSTOMFUNCTION_PRE hw_data_pre
; !define MUI_PAGE_CUSTOMFUNCTION_SHOW hw_data_dir
; !define MUI_DIRECTORYPAGE_VARIABLE $HW_DATA_DIR
; !insertmacro MUI_PAGE_DIRECTORY
; ## This is the title on the Headwave Workspace Directory page
; !define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_WK)"
; !define MUI_PAGE_HEADER_TEXT "Choose Headwave Workspace directory"
; !define MUI_PAGE_HEADER_SUBTEXT "Select the folder which Headwave can use as a workspace."
; # HW Workspaces
; !define MUI_PAGE_CUSTOMFUNCTION_PRE hw_wk_pre
; !define MUI_PAGE_CUSTOMFUNCTION_SHOW hw_wk_dir
; !define MUI_DIRECTORYPAGE_VARIABLE $HW_WORKSPACE_DIR
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
## This is the title on the Headwave installation Directory page to obtain directory for %HEADWAVE_ROOT_DIR
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_INST)"
!define MUI_PAGE_HEADER_TEXT "Choose Headwave Plugin installation directory"
!define MUI_PAGE_HEADER_SUBTEXT "Select the folder where Headwave is presently installed to set environment variable."
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesHeadwaveProg
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
; ...
Function HeadwaveConfiguration
!insertmacro MUI_HEADER_TEXT "Headwave configuration" "Select the respective folders for Headwave."
nsDialogs::Create 1018
Pop $headwaveConfigDialog
${NSD_CreateLabel} 0 0 100% 12u "Select the folder which Headwave can use as a data storage:"
Pop $headwaveConfigDataDirLabel
${NSD_CreateText} 10% 20u 80% 12u "C:\HW-Data"
Pop $headwaveConfigDataDirText
StrCpy $HW_DATA_DIR $headwaveConfigDataDirText
${NSD_CreateLabel} 0 40u 80% 12u "Select the folder which Headwave can use as a workspace:"
Pop $headwaveConfigWkDirLabel
${NSD_CreateText} 10% 60u 80% 12u "C:\HW-Workspaces"
Pop $headwaveConfigWkDirText
StrCpy $HW_WORKSPACE_DIR $headwaveConfigWkDirText
;${NSD_CreateLabel} 0 80u 80% 12u "Select the folder where Headwave is installed:"
;Pop $headwaveConfigProgramDirLabel
;StrCpy $headwaveConfigProgramDirText $HeadwaveInstallDir
;${NSD_CreateText} 10% 100u 80% 12u $HeadwaveInstallDir
;Pop $headwaveConfigProgramDirText
;StrCpy $HeadwaveInstallDir $headwaveConfigProgramDirText
;MessageBox MB_OK 'HeadwaveConfiguration: HeadwaveInstallDir = $HeadwaveInstallDir; headwaveConfigProgramDirText = $headwaveConfigProgramDirText'
SetCtlColors $headwaveConfigHwnd 0xFF0000 0xFFFFFF
nsDialogs::Show
FunctionEnd
但问题是 HeadwaveConfiguration nsDialog
页面获得获取 HW_DATA_DIR
和 HW_WORKSPACE_DIR
的调用,但它只是跳转到开始安装 MyApp
而不是首先安装 Headwave 组件,然后继续安装 MyApp
有人有什么建议吗? TIA.
更新:
这是我更新代码的方式,但它在跳转到 MyApp 安装页面之前仍然没有安装 Headwave 组件:
!define MUI_PAGE_CUSTOMFUNCTION_PRE SelectFilesCheck
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsLeave
!insertmacro MUI_PAGE_COMPONENTS
## This is the title on the Headwave Data Directory page
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW)"
!define MUI_PAGE_HEADER_TEXT "Headwave configuration"
!define MUI_PAGE_CUSTOMFUNCTION_PRE HeadwaveConfigurationPre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW HeadwaveConfigurationShow
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
## This is the title on the Headwave installation Directory page to obtain directory for %HEADWAVE_ROOT_DIR%
!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP_HW_INST)"
!define MUI_PAGE_HEADER_TEXT "Choose Headwave Plugin installation directory"
!define MUI_PAGE_HEADER_SUBTEXT "Select the folder where Headwave is presently installed to set environment variable."
Function HeadwaveConfigurationPre
!insertmacro MUI_HEADER_TEXT "Headwave configuration" "Select the respective folders for Headwave."
nsDialogs::Create 1018
Pop $headwaveConfigDialog
${NSD_CreateLabel} 0 0 100% 12u "Select the folder which Headwave can use as a data storage:"
Pop $headwaveConfigDataDirLabel
${NSD_CreateText} 10% 20u 80% 12u "C:\HW-Data"
Pop $headwaveConfigDataDirText
StrCpy $HwDataDir $headwaveConfigDataDirText
${NSD_CreateLabel} 0 40u 80% 12u "Select the folder which Headwave can use as a workspace:"
Pop $headwaveConfigWkDirLabel
${NSD_CreateText} 10% 60u 80% 12u "C:\HW-Workspaces"
Pop $headwaveConfigWkDirText
StrCpy $HwWorkspaceDir $headwaveConfigWkDirText
;${NSD_CreateLabel} 0 80u 80% 12u "Select the folder where Headwave is installed:"
;Pop $headwaveConfigProgramDirLabel
;StrCpy $headwaveConfigProgramDirText $HeadwaveInstallDir
;${NSD_CreateText} 10% 100u 80% 12u $HeadwaveInstallDir
;Pop $headwaveConfigProgramDirText
;StrCpy $HeadwaveInstallDir $headwaveConfigProgramDirText
SetCtlColors $headwaveConfigHwnd 0xFF0000 0xFFFFFF
nsDialogs::Show
FunctionEnd
Function HeadwaveConfigurationShow
MessageBox MB_OK 'HeadwaveConfiguration: HeadwaveInstallDir = $HeadwaveInstallDir; headwaveConfigProgramDirText = $headwaveConfigProgramDirText'
FunctionEnd
## Section 1
Section "MyPartnerApp Plugin" SEC1
MessageBox MB_OK 'Headwave Plugin #1: INSTDIR = $INSTDIR'
${If} ${SectionIsSelected} ${SEC1}
${StrContains} [=12=] "MyPartnerApp" "$INSTDIR"
StrCmp [=12=] "" notfoundMyPartnerApp
Goto doneMyPartnerApp
doneMyPartnerApp:
MessageBox MB_OK 'Headwave Plugin #2: HW_DATA_DIR = $HW_DATA_DIR'
SetOutPath "$HW_DATA_DIR"
${StrContains} [=12=] "Data" "$HW_DATA_DIR"
StrCmp [=12=] "" notfoundHwData
Goto doneHwData
;MessageBox MB_OK 'Did not find MyApp string'
doneHwData:
##All the files in Group 0 will be installed to the same location, $HW_DATA_DIR
MessageBox MB_OK 'Headwave Plugin #3: HW_DATA_DIR = $HW_DATA_DIR'
SetOutPath "$HW_DATA_DIR"
CreateDirectory "$HW_DATA_DIR"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins\ComputePlugin"
CreateDirectory "$HW_DATA_DIR\MyApp-Plugins\ExtensionPlugin"
File /oname=$HW_DATA_DIR\MyApp-Plugins\ComputePlugin\computeplugin.xplot.dll computeplugin.xplot.dll
File /oname=$HW_DATA_DIR\MyApp-Plugins\ComputePlugin\computeplugin.VirtualVolume.dll computeplugin.VirtualVolume.dll
File /oname=$HW_DATA_DIR\MyApp-Plugins\ExtensionPlugin\hwProxyInterface.MyApp.dll hwProxyInterface.MyApp.dll
# MyPartnerApp workspace
CreateDirectory "$HW_WORKSPACE_DIR"
##All the files in Group 1 will be installed to the same location, $INSTDIR
SetOutPath "$INSTDIR"
;messagebox mb_ok "MyPartnerApp Program: INSTDIR is $INSTDIR"
# set environment variable for current user
WriteRegExpandStr ${env_hkcu} HEADWAVE_ROOT_DIR $INSTDIR
# save the selected headwave program directory
StrCpy $MyPartnerAppSelectedInstallDir $INSTDIR
# make sure windows knows about the change
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
# Install Sound-MyApp python scripts
CreateDirectory $INSTDIR\python\hwtoolkits\MyCompany
File __init__.py
File MyAppConfig.py
File MyAppPlugin.py
CopyFiles $INSTDIR\*.py $INSTDIR\python\hwtoolkits\MyCompany
notfoundHwData:
notfoundMyPartnerApp:
; Do nothing
${Else}
Abort
${EndIf}
SectionEnd
我本以为应该首先调用 HeadwaveConfigurationPre,因此 $HW_DATA_DIR
应该是 C:\HW-Data
,但我添加的消息框之一显示如下:
Headwave Plugin #2: HW_DATA_DIR = 6494062
更新 2:
感谢@Anders 的反馈。
这是我最新的代码,最初它获取 $HwDataDir
和 $HwWorkspaceDir
的值:
https://pastebin.com/VsT0MJf1 注意: 我之前只在 https://pastebin.com/DJTLQ05D
中粘贴了部分代码这是一个显示初始获取值的对话框:
接下来进入插件安装页面:
但最终,它到达了这行代码:
MessageBox MB_OK 'Headwave Plugin #2: HwDataDir = $HwDataDir'
在这种情况下 $HwDataDir
又有一个数字:
你能告诉我,那是怎么发生的吗?为什么值会从 C:\HW-Data
变为 1181026? TIA.
您不能将 MUI_PAGE_CUSTOMFUNCTION_* 与 nsDialogs 一起使用。在上次更新中 $HwDataDir 包含一个数字,因为它是文本控件的句柄,而不是它的文本。即使您在错误的时间要求它的文本,您也应该在离开回调中这样做。自定义页面只有create和leave回调,没有pre和show!
以下是 nsDialogs 文档中的部分示例代码:
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
Pop $Label
${NSD_CreateText} 0 13u 100% -13u "Type something here..."
Pop $Text
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetText} $Text [=10=]
MessageBox MB_OK "You typed:$\n$\n[=10=]"
FunctionEnd
您的代码包含其他问题,例如
Section "MyPartnerApp Plugin" SEC1
${If} ${SectionIsSelected} ${SEC1}
这没有意义,你不能那样检查自己。 IsPROG0HwDataSelected 函数已损坏,您应该使用 ${If} 和适当的部分索引从头开始重写它。
更新 2:
在您的新代码中,StrCpy $HwDataDir $headwaveConfigDataDirText
是句柄“损坏”的地方。你不需要 StrCpy,你在 leave 函数中需要的只是 ${NSD_GetText} $headwaveConfigDataDirText $HwDataDir
.