キャンセルボタンの無効化 (Install Shield)

印刷

インストーラ開発の技術情報です。

インストーラ開発アプリケーションは、海外ではそこそこ需要があり、InstallShiledなどの商用インストーラソフトもがんがん使われています。しかし国内では、インストーラ開発はかなりニッチな分野のようです。日本語の技術情報がとても少ないです。

そこで、少しでもインストーラ開発の技術情報をアップしていくことにしました。InstallShiled中心です。

第1回目は、キャンセルボタンの無効化。

InstallShiledでは、インストールをするときに[x]をクリックすると「本当にインストールを中止しますか?」とダイアログが出て、はい、と答えるとインストールを中止(abort)します。

ここまではよくある話です。

つぎに、InstallShiledからCなどの外部プログラムをキックしたいケースがよくあります。例えばドライバインストールのとき。他にも、InstallScriptでは出来ないことをCでやりたいときは多々出てきます。

ここで問題が出てきます。中止したときのロールバック(Rollback)処理です。ロールバック処理とは「インストールしなかったこと」にする処理です。

しかし、スクリプト、外部プログラム、外部DLLなどでファイルやレジストリを書き換えた場合は、InstallShiedはこれらのロールバックを行えません。このような場合にはロールバック処理を自前で書くか、インストールのキャンセルを禁止してロールバックを行わないようにするか選択することになります。

ユーザーがインストールをキャンセルするには、[キャンセル]ボタンを押すか、ウィンドウ右上の[X]ボタンを押します。この記事では[キャンセル]ボタンの無効化方法を説明し、閉じるボタン[X]の無効化については別の記事で説明します。

 

Install Shiled ver 10以降で(ver 9でもいけるかもしれない)対応できます。

    hWindow = FindWindow("#32770", IFX_SETUP_TITLE);
      if (hWindow) then hButton = GetDlgItem(hWindow, IDCANCEL);
        if (hButton) then EnableWindow(hButton, FALSE);
        endif;
    endif; 

#32770などのパラメータを探すのがたいへんだと思います。元ネタはこちらです。

flexerasoftware.comコミュニティ(英語)の"Changing the default text in the "copying files" dialog"