InstallShield Windows Installer 形式 DLLの利用方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
InstallShieldからWin32の機能を利用するため、DLL作成方法とそれを利用する方法を説明する。DLLの機能としてインストーラが管理者権限で起動しているか確認し、通常権限で起動している場合、インストールを中止する機能を作成する。
1.Windows Installer 形式 DLL ファイルの作成
① Visual Studioを起動し、プロジェクトの新規作成から「Visual C++」、「Win32」、「Win32プロジェクト」を選択し、プロジェクトの名前を「AdminCheck」として「OK」ボタンを押す。
② アプリケーションの設定
アプリケーションの種類: DLL
追加のオプション: 空のプロジェクト
でプロジェクトを作成する。
③ ファイルの作成
以下二つのファイル「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.カスタムアクションの作成
① カスタムアクションウィザードの起動
「動作とロジック」、「カスタム アクションとシーケンス」と選択し「カスタム アクション」を右クリックし「カスタムアクションウィザード」を選択する。
② 基本情報
名前: CheckUserAdmin
コメント: Windows Installer 形式DLLを利用して管理者権限か確認する
③ アクションの種類
種類: Windows Installerのダイナミックリンクライブラリの関数を呼び出す
場所: Binary テーブルに保存する
④ アクションのパラメータ
ソース: AdminCheck.dllを指定する。
ターゲット: 関数名 IsAnAdmin を指定
ターゲットは設定済みで、修正する場合はウィザードから戻って設定を変更する。
⑤ 追加オプオション
戻り値の処理: 同期(終了コードを確認)
⑥ 応答オプション
スクリプト内実行: 即時実行
実行スケジュール: 1プロセスにつき1回実行
⑦ シーケンスに挿入する
インストールUIシーケンス: 次の後:AppSearch
インストール実行シーケンス: <シーケンスになし>
⑧ シーケンス確認
「AppSearch」の後に「CheckUserAdmin」が設定されています。
ビルドして完了です。
3.動作確認
出来上がったsetup.exeを通常権限で実行します。
と表示され、以降のインストールウィザードは完了します。
次に管理者として実行します。
と表示され、以降のインストーウィザードも進めることができます。
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)