1

NSIS スクリプトを使用して EXE ファイルを作成しました。次のコードを使用してカスタム ページを作成しました。

page custom check

Function check
    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My app" "UninstallString"
    IfFileExists $R0 +1 NotInstalled
        call nsDialogpage

    NotInstalled:
FunctionEnd

Function nsDialogpage
     nsDialogs::Create 1018
     Pop $Dialog12
     ${If} $Dialog12 == error
         Abort
     ${EndIf}
     ${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
     Pop $Repair
     ${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
     Pop $Remove
     ${NSD_SetState} $Repair ${BST_CHECKED}
     ${NSD_GetState} $Repair $test
     --Do repair operation--
     ${NSD_OnClick} $Remove "Remove"
     nsDialogs::Show
     ${NSD_GetState} $Remove $RadioButton_State
     ${If} $RadioButton_State == ${BST_CHECKED}
         call Removed
     ${Else}
         Goto Done
     ${EndIf}
     Done:
FunctionEnd    

Function Remove
     nsDialogs::Create 1018
     Pop $Dialog12
     ${If} $Dialog12 == error
           Abort
     ${EndIf}
        --Do remove function--
      /* nsDialogs::Show*/
 FunctionEnd

上記のコードを実行しても機能しません。show 関数の後に実行されるコードはありません。

私の要件は、

ユーザーが削除ラジオ ボタンをクリックすると、次のページに移動してアンインストール プロセスが実行され、ページが終了します。上記のコードを使用してこのシナリオを試しましたが、正常に動作しています。

nsis インストーラーに 2 つのカスタム ページを含めるには?

誰でも私を助けることができますか?

ありがとう。

4

2 に答える 2

2

カスタム ページを追加するのとまったく同じ方法で、2 つのカスタム ページを追加できます。

Page custom check 
Page custom Remove

Andersが言ったように、後に置いたものはすべてnsDialogs::Show実行されません。このコードを新しい「leave」関数に移動する必要があります。

Var RemoveRequested
Function RemoveCheck
    ${NSD_GetState} $Remove $RadioButton_State
    ${If} $RadioButton_State == ${BST_CHECKED}
        StrCpy $RemoveRequested "1"
    ${Else}
        StrCpy $RemoveRequested "0"
    ${EndIf}
FunctioEnd

ユーザー選択をグローバル変数に保存しています$RemoveRequested。次に、次のカスタム ページで、この変数をチェックして、必要なことを行うかAbort、2 ページ目が表示されないようにすることができます。

次に、カスタム ページの宣言を変更する必要があります。

Page custom check RemoveCheck
Page custom Remove

ここでcheck、カスタム ページを表示するために使用され、ユーザーがページを離れる (== [次へ] をクリックする) と、関数RemoveCheckが実行されます。

Remove 関数は、作成したばかりのフラグをチェックする必要があります。

Function Remove
    ${If} $RemoveRequested == "1"
        nsDialogs::Create 1018
        Pop $Dialog12
        ${If} $Dialog12 == error
            Abort
        ${EndIf}
        --Do remove function--
        /* nsDialogs::Show*/
    ${EndIf}
FunctionEnd
于 2012-12-05T10:04:34.293 に答える
0

ページが基本的になくなったら、leave コールバックで作業をnsDialogs::Show行います。Page custom nsDialogpage dotheradiocheckinthisfunction

于 2012-12-01T19:03:12.710 に答える