0

nsisを使用してインストーラーを構築しています。インストーラーのディレクトリページダイアログにリソースハッカーを使用して5つのボタンを追加しました。また、私はこれらの関数を定義しました:

      !define IDC_BUTTON_CDRIVEPATH         1200
      !define IDC_BUTTON_DDRIVEPATH         1201
      !define IDC_BUTTON_EDRIVEPATH         1202
      !define IDC_BUTTON_FDRIVEPATH         1203
      !define IDC_BUTTON_GDRIVEPATH         1204

!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit

  !insertmacro MUI_PAGE_WELCOME
  !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\licensefile.txt"

    !define MUI_PAGE_CUSTOMFUNCTION_PRE DirectoryPre
    !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow

      !insertmacro MUI_PAGE_DIRECTORY

      !insertmacro MUI_PAGE_COMPONENTS
      !insertmacro MUI_PAGE_INSTFILES
      !insertmacro MUI_PAGE_FINISH

Function DirectoryShow

  GetFunctionAddress $R0 DDRIVEPATH
  ButtonEvent::AddEventHandler ${IDC_BUTTON_DDRIVEPATH} $R0
FunctionEnd 

Function DirectoryPre

  GetFunctionAddress $R6 EDRIVEPATH
  ButtonEvent::AddEventHandler ${IDC_BUTTON_EDRIVEPATH} $R6

line 1--      GetFunctionAddress $R7 FDRIVEPATH
line 2--      ButtonEvent::AddEventHandler ${IDC_BUTTON_FDRIVEPATH} $R7

line 3--      GetFunctionAddress $R8 GDRIVEPATH
line 4--      ButtonEvent::AddEventHandler ${IDC_BUTTON_GDRIVEPATH} $R8

FunctionEnd

2つのハンドラーFDRIVEPATHGDRIVEPATHを削除しない場合、つまり行を削除しない場合--LINE 1,2,3,4、then、-------------COMPONENTSに移動するときページをクリックし、[戻る]ボタンを押して[ディレクトリ]ページに戻ると、インストーラーが自動的に終了します。なぜそれが起こっているのか分かりません。助けてください?2日以来それで立ち往生しています。

しかし、2つのハンドラーFDRIVEPATHGDRIVEPATHを削除すると、つまり行1、2、3、4を削除すると、インストーラーは正しく実行されます。

これらの5つのボタンのすべてのハンドラーが必要です。私はそれらのいずれかを削除したくありません。

以下は私のディレクトリページのダイアログです:--------- ここに画像の説明を入力してください

4

2 に答える 2

1

スペースを節約するために、すべてのドライブ文字が入力される ComboBox または ListBox を使用します。

nsDialogs で作成された ComboBox:

Var CB_Buttons

${NSD_CreateComboBox} 0 20 32% 100 ""
Pop $CB_Buttons
   ${NSD_CB_AddString} $CB_Buttons "A:\" 
   ${NSD_CB_AddString} $CB_Buttons "B:\"
   ${NSD_CB_AddString} $CB_Buttons "C:\"
etc. 
于 2011-05-23T13:33:48.453 に答える