SSブログ

InstallShield Windows Installer 形式 DLLの利用方法 [InstallShield]

InstallShieldバージョン: 2010

プロジェクトタイプ: 基本のMSIプロジェクト

InstallShieldからWin32の機能を利用するため、DLL作成方法とそれを利用する方法を説明する。DLLの機能としてインストーラが管理者権限で起動しているか確認し、通常権限で起動している場合、インストールを中止する機能を作成する。

1.Windows Installer 形式 DLL ファイルの作成

① Visual Studioを起動し、プロジェクトの新規作成から「Visual C++」、「Win32」、「Win32プロジェクト」を選択し、プロジェクトの名前を「AdminCheck」として「OK」ボタンを押す。

image

② アプリケーションの設定

アプリケーションの種類: DLL

追加のオプション: 空のプロジェクト

でプロジェクトを作成する。

image

③ ファイルの作成

以下二つのファイル「AdminCheck.cpp」「AdminCheck.def」を作成します。

ファイル「AdminCheck.cpp」

// link to MSI library

#pragma comment(lib, "msi.lib")

// include standard Windows and MSI headers

#include < windows.h >

#include < msi.h >

#include < msiquery.h >

UINT __stdcall IsAnAdmin(MSIHANDLE hInstall) {

    BOOL b = FALSE;

    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;

    PSID AdministratorsGroup;

    b = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup);

    if(b) {

        if (!CheckTokenMembership( NULL, AdministratorsGroup, &b)) {

        b = FALSE;

    }

    FreeSid(AdministratorsGroup);

    }

    switch(b) {

        case TRUE:

           MessageBox(GetForegroundWindow( ), TEXT("管理者権限で起動しました"), TEXT("Custom Action"), MB_OK | MB_ICONINFORMATION);

            b = FALSE;

            break;

        case FALSE:

            MessageBox(GetForegroundWindow( ), TEXT("通常権限で起動しました"), TEXT("Custom Action"), MB_OK | MB_ICONINFORMATION);

            b = TRUE;

            break;

        }

        return(b);

    }

// Windows Installerと情報の受け渡しをプロパティを利用して行うサンプル

UINT __stdcall SecondAction(MSIHANDLE hInstall) {

    // max. USERNAME size, from CustomerInformation panel

    const DWORD MAX_USERNAME_LEN = 50;

    // initialize empty string and size buffer

    TCHAR UserName[MAX_USERNAME_LEN + 1] = {0};

    DWORD Buffer = MAX_USERNAME_LEN + 1;

    // read and display the initial value of USERNAME

    MsiGetProperty(hInstall, TEXT("USERNAME"), UserName, &Buffer);

    MessageBox(GetForegroundWindow( ), UserName, TEXT("USERNAME"), MB_OK | MB_ICONINFORMATION);

    // change the value of USERNAME

    MsiSetProperty(hInstall, TEXT("USERNAME"),

    TEXT("Valued Customer"));

    return ERROR_SUCCESS;

}

ファイル「AdminCheck.def」

LIBRARY CustomAction

EXPORTS

IsAnAdmin

④ ビルドします。

2.カスタムアクションの作成

① カスタムアクションウィザードの起動

「動作とロジック」、「カスタム アクションとシーケンス」と選択し「カスタム アクション」を右クリックし「カスタムアクションウィザード」を選択する。

image

image

② 基本情報

名前: CheckUserAdmin

コメント: Windows Installer 形式DLLを利用して管理者権限か確認する

image

③ アクションの種類

種類: Windows Installerのダイナミックリンクライブラリの関数を呼び出す

場所: Binary テーブルに保存する

image

④ アクションのパラメータ

ソース: AdminCheck.dllを指定する。

ターゲット: 関数名 IsAnAdmin を指定

ターゲットは設定済みで、修正する場合はウィザードから戻って設定を変更する。

image

⑤ 追加オプオション

戻り値の処理: 同期(終了コードを確認)

image

⑥ 応答オプション

スクリプト内実行: 即時実行

実行スケジュール: 1プロセスにつき1回実行

image

⑦ シーケンスに挿入する

インストールUIシーケンス: 次の後:AppSearch

インストール実行シーケンス: <シーケンスになし>

image

⑧ シーケンス確認

「AppSearch」の後に「CheckUserAdmin」が設定されています。

image

ビルドして完了です。

3.動作確認

出来上がったsetup.exeを通常権限で実行します。

image

と表示され、以降のインストールウィザードは完了します。

次に管理者として実行します。

image

と表示され、以降のインストーウィザードも進めることができます。


nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

MatgehasY

Levitra De 10mg http://abcialisnews.com - Buy Cialis Canadiana Pharmcy In Sarasato <a href=http://abcialisnews.com>п»їcialis</a> Clobetasol In Canada Pharmacy
by MatgehasY (2020-03-04 06:31) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。