InstallShield ショートカットの生成と引数の設定 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
インストールデザイナから「システム構成」、「ショートカット」を選択し、ビュー画面でショートカットを作成したい場所を選択する。ここではデスクトップに作成するので「デスクトップ」を右クリックし現れたダイアログの「ショートカットの新規作成」を選択する。
「ショートカットターゲットの参照」ダイアログから、「検索」でインストール先のフォルダを選択し、ファイル名にターゲットファイル名(機能とキーファイル名はプロジェクトによるので適切なものを選ぶ)を指定し「開く」ボタンを押す。
新たにショートカットが作成されるので、適当な名前に変更する。
2.ショートカットプロパティの設定
作成されるショートカットに引数を与える場合
作成されたショートカットを選択しショートカットのプロパティを開き、「引数」欄にコマンドライン引数を入力する。ここでは”/Setting”と設定した。
3.確認
デスクトップにショートカットが作成された。
ショートカットアイコンを右クリックし「プロパティ」を選択する。」「ショートカット」タブを選択し「リンク先」のコマンドラインに引数が追加されていればOK。
以上
InstallShield レジストリへのキー追加 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
レジストリへのキー追加の方法について説明する。ここではWindowsが共通に使用する“”へDWORD値“”を追加する。
1.レジストリの設定
①レジストリビュー画面
インストールデザイナから「システム構成」、「レジストリ」を選択し“インストール先コンピュータの[レジストリ]ビュー”画面を開きます。
②ビューフィルター
画面上部の「ビューフィルタ」から「すべてのアプリケーション データ」を選択します。
③キーの作成
インストール先コンピュータの[レジストリ]ビューで、キーを作成する場所を右クリックし、「新規作成」、「キー」を選択する。
作詞された「新しいキー #1」に
“SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”を入力するとキーが作成される。
④値の設定
値を作成するキー(System)を右クリックし「新規作成」「DWORD値」を選択する。
“新しい値 #1”ができるので“LocalAccountTokenFilterPolicy”とリネームし、ルクリックして値を「1」に設定する
2.レジストリ キーの確認
①レジストリエディタの起動
Windowsのメニューから“プログラムとファイルの検索”の“regedit.exe”と入力しレジストリエディタを起動する。
②キーへの移動
値が記述された位置、
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System)まで移動する。
③値の確認
以下の値が書き込まれて入れば成功。
*注意
以下のように「プロジェクト アシスタント」を利用して設定する方法もある。
以上
InstallShield ML 「参加方法」 [InstallShield]
Installer 関連 ML への参加に加え、知りたいことズバリのInstalShield MLを見つけたので参加してみました。
1.InstallShield ML Webサイト
以下のサイトからグループに参加できる。YAHOO! JAPANのユーザーIDはすでに持っていたので以下のような表示となっています。ここで「このグループに参加する」ボタンを押します。
2.参加
受信メールアドレスが2つ登録されているので、受信を希望するアドレスを選択して「参加」ボタンを押します。
3.管理者による承認待ち
4.断念
申請して10日が過ぎましたが承認メールが届きません。残念ながらこのMLへの参加を断念することにしました。
引き続き承認メールは待ちの状態としておきますが、承認されても積極的に運用は出来ないなとの感想です。
参考サイト
InstallShield Windowsサービスの制御 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
コンポーネントウィザードを使用して実現する。今回はWindowsサービスの“Remote Registry”の「スタートアップの種類」を「自動」に、「サービスの状態」を「実行」に設定する方法について説明する。
ここでは、InstallShieldの「コンポーネント」を使用する例と、「カスタムアクション」を使用する2つの例を説明する。
本来、「コンポーネント」を利用するのが標準的な方法と思われるが、現状では下記のメッセージでインストールに失敗するため、「カスタムアクション」を利用する方法も併記する。
Ⅰ.コンポーネントを利用する例(エラーで停止)
1.コンポーネントの作成
「編成」、「セットアップのデザイン」または「コンポーネント」を選択する。今回は「セットアップのデザイン」を選択してコンポーネントを作成します。
「セットアップのデザイン」エクスプローラで「TestMSI_WinService_Files」を右クリックし、現れたメニューの「コンポーネントウィザード」を選択する。
2.コンポーネントウィザード
①コンポーネントウィザードへようこそ
「種類を選択してコンポーネントの定義を行う」を選択。
②コンポーネントの種類
コンポーネント名: 適当な名前を入力する。今回はRemoteRegistry
コンポーネントの種類: サービスのコントロール
③サービスの指定
インストール先システムに存在しているサービス
サービス名: Remote Registry
④インストールイベント
「サービスの開始」をチェック
⑤アンインストールイベント
「サービスの停止」をチェック
⑥大気の種類
デフォルトのまま進める
⑦概要
内容確認して進む。
⑧登録完了
3.動作確認
下記エラーメッセージでインストールできず。
Ⅱ.カスタムアクションを利用する例
1.カスタムアクションの作成
① インストールデザイナから「動作とロジック」、「カスタム アクションとシーケンス」、「カスタムアクション」を右クリックします「新しいEXE」、「ディレクトリを参照するパス」と選択します。
②“NewCustumAction1”が出来上がるので適当な名前に変更します。
“NewCustomAction”->“AddRemoteRegistry”
③AddRemoteRegistryのプロパティを以下の内容に設定します。
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するため SystemFolder 識別子を使用して、system32 フ ォルダを作業フォルダに指定 |
戻り値の処理 | 同期(終了コードを無視) | |
コマンドライン | cmd.exe /c"net start "Remote Registry"" | |
スクリプト内実行 | 遅延実行(ターミナルサーバーで使用可能) | |
インストール実行シーケンス | 次の後:InstallFiles | |
インストール実行条件 | NOT Installed | 初回インストール時のみ実行される条件 |
④さらに以下の条件でインストール時のロールバック用、アンインストール用、アンインストール時のロールバック用の3つのカスタムアクションも作成します。
◆インストール時のロールバック用 AddRemoteRegistry_RollBack
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するため SystemFolder 識別子を使用して、system32 フ ォルダを作業フォルダに指定 |
戻り値の処理 | 同期(終了コードを無視) | |
コマンドライン | cmd.exe /c"net stop "Remote Registry"" | |
スクリプト内実行 | ロールバック実行(ターミナルサーバーで使用可能) | |
インストール実行シーケンス | 次の後:InstallFiles | |
インストール実行条件 | NOT Installed | 初回インストール時のみ実行される条件 |
◆アンインストール用 DeleteRemoteRegistry
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するため SystemFolder 識別子を使用して、system32 フ ォルダを作業フォルダに指定 |
戻り値の処理 | 同期(終了コードを無視) | |
コマンドライン | cmd.exe /c"net stop "Remote Registry"" | |
スクリプト内実行 | ロールバック実行(ターミナルサーバーで使用可能) | |
インストール実行シーケンス | 次の後:RemoveDuplicateFiles | |
インストール実行条件 | REMOVE="ALL" | アンインストール時のみ実行される条件 |
◆アンインストール時ロールバック用 DeleteRemoteRegistry_RollBack
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するため SystemFolder 識別子を使用して、system32 フ ォルダを作業フォルダに指定 |
戻り値の処理 | 同期(終了コードを無視) | |
コマンドライン | cmd.exe /c"net start "Remote Registry"" | |
スクリプト内実行 | 遅延実行(ターミナルサーバーで使用可能) | |
インストール実行シーケンス | 次の後:RemoveDuplicateFiles | |
インストール実行条件 | REMOVE="ALL" | アンインストール時のみ実行される条件 |
2.動作確認
①サービスの開始確認
インストール完了後にサービス(Remote Registry)を確認すると「開始」となっている。
②サービスの停止確認
アンインストール完了後にサービス(Remote Registry)を確認すると「開始」が消えている。停止している。
以上
Installer 関連 ML 「参加方法」 [InstallShield]
InstallShieldを使っていると、ニュアルやHELPではわからない事が多くWeb調査や実動作での確認で時間がかかることが多い。メーカーのサポートプログラムがあるが、高価なため現状では入ることが困難。いろいろ調べたところ、Installer 関連 ML 見つけたので参加してみました。
1.Installer 関連 ML Webサイト
以下のサイトから参加します。「MLに参加」ボタンを押します。
http://www.freeml.com/ctrl/html/MessageListForm/msi@freeml.com
2.参加
やはりID登録が必要なようです。「マイページをつくる」ボタンを押して「GMOとくとくID」用マイページを作ります。
3.新規マイページ作成
①メールアドレス確認
メールアドレスを入力し「確認メールを送信する」ボタンを押します。
②プロフィール情報
送られてきたメールに記載されているURLをクリックすると「プロフィール情報の登録」ページが現れます。ここにプロフィール情報を入力して先に進みます。
③マイページ作成完了
プロフィール内容確認後、マイページが作成されます。
4.MLの登録
マイページから参加するメーリングリストを探します。
キーワード「installer」で検索します。
見つかりました。
参加します。
参加の確認後、参加が完了しました。
メーリングリストへの参加方法については以上です。過去ログの取得方法については次回書きます。
参考サイト
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を通常権限で実行します。
と表示され、以降のインストールウィザードは完了します。
次に管理者として実行します。
と表示され、以降のインストーウィザードも進めることができます。
基本のMSIデバッグ方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
1.リリースビルドを行う
「単一MSIパッケージ」を選択し、インストールのビルドを行う。
2.「MSIデバッガ」ビューを開く
ツールバーの「MSIデバッガ」ボタンを押すか、「ビルド」、「MSIデバッガ」、「MSIデバッガの開始」をクリックする。
「ボタン」の場合
「メニュー」の場合
「インストールデザイナ」に動作シーケンスおよびインストーラのダイアログが表示されます。
インストーラーの実行をキャンセルし、ブレークさせたい行を選択し“F9”を押しブレークポイントを設定する。
次に前述の「MSIデバッグ」ボタンを押すと、ブレークポイントまでインストール処理が進み、その時点でのプロパティと値が表示される。
あとは「ステップオーバー」、「ステップイン」ボタンを使用して、基本のMSIでもデバッグが可能。
InstallShield Windowsファイアウォールの設定を変更する方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
インストール時にPCのWindowsファイアウォールの設定を変更したい場合がある。コマンドラインからnetshコマンドを発行することでセキュリティ規則の有効/無効を切り替えることができる。
ここでは「Windowsファイアウォール」の「受信の規則」内「Windows ファイアウォール リモート管理」グループの「有効」の「はい/いいえ」を一括で変更する方法を説明する。
1.コマンド文字列の動作確認
①ファイアウォールの設定確認
「コントロールパネル」、「管理ツール」「セキュリティが強化された Windows ファイアウォール」をクリックして管理ツールを起動する。
「受信の規則」を選択し、グループ列から「Windows ファイアウォール リモート管理」が現れるまでスクロールし有効列の値を確認する。
②コマンドプロンプトを管理者権限で起動する。
③以下のコマンドを発行する。
“netsh advfirewall firewall set rule group=”Windows ファイアウォールリモート管理” new enable=yes”し4個の規則が更新されることを確認する。
④ファイアウォールの設定確認
再び管理ツールに戻り、メニューから「操作」、「最新の情報に更新」と選択し「受信の規則」を確認し、「Windows ファイアウォールリモート管理」または「ファイルとプリンター共有」グループの有効が“はい”となっていることを確認する。
動作確認が終了したらコマンドのenable=yes 部の記述を enable=no としてコマンドを発行し設定を戻しておく。
2.InstallShieldへのカスタムアクション組み込み
① インストールデザイナから「動作とロジック」、「カスタム アクションとシーケンス」、「カスタムアクション」を右クリックします「新しいEXE」、「ディレクトリを参照するパス」と選択します。
② “NewCustumAction1”が出来上がるので適当な名前に変更します。
“NewCustomAction”->“caAddFireWall”
③ プロパティを以下の内容に設定します。
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するためSystemFolder 識別子を使用して、system32 フォルダを作業フォルダに指定 |
コマンドライン | cmd.exe /c"netsh advfirewall firewall set rule group="Windows ファイアウォール リモート管理" new enable=yes" | |
スクリプト内実行 | システムコンテキストで遅延実行 | |
インストール実行シーケンス | 次の後:InstallFiles | |
インストール実行条件 | NOT Installed | 初回インストール時のみ実行される条件 |
④ さらに以下の条件でインストール時のロールバック用、アンインストール用、アンインストール時のロールバック用の3つのカスタムアクションも作成します。
◆インストール時のロールバック用 caAddFireWall_RollBack
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するためSystemFolder 識別子を使用して、system32 フォルダを作業フォルダに指定 |
コマンドライン | cmd.exe /c"netsh advfirewall firewall set rule group="Windows ファイアウォール リモート管理" new enable=no" | |
スクリプト内実行 | システムコンテキストでロールバック実行 | |
インストール実行シーケンス | 次の後:InstallFiles | |
インストール実行条件 | NOT Installed | 初回インストール時のみ実行される条件 |
◆アンインストール用 caDeleteFireWall
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するためSystemFolder 識別子を使用して、system32 フォルダを作業フォルダに指定 |
コマンドライン | cmd.exe /c"netsh advfirewall firewall set rule group="Windows ファイアウォール リモート管理" new enable=no" | |
スクリプト内実行 | システムコンテキストでロールバック実行 | |
インストール実行シーケンス | 次の後:RemoveDuplicateFiles | |
インストール実行条件 | REMOVE="ALL" | アンインストール時のみ実行される条件 |
◆アンインストール時のロールバック用 caDeleteFireWall_ RollBack
プロパティ名 | 設定内容 | 説明 |
作業ディレクトリ | SystemFolder | ターゲットシステム上のcmd.exe を使用するためSystemFolder 識別子を使用して、system32 フォルダを作業フォルダに指定 |
コマンドライン | cmd.exe /c"netsh advfirewall firewall set rule group="Windows ファイアウォール リモート管理" new enable=yes" | |
スクリプト内実行 | システムコンテキストで遅延実行 | |
インストール実行シーケンス | 次の後:RemoveDuplicateFiles | |
インストール実行条件 | REMOVE="ALL" | アンインストール時のみ実行される条件 |
InstallShield プロパティによるインストール条件を変える方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
インストールするPCの環境によりインストールする内容を変更する場合がある。そのさいコンポーネントのプロパティ“条件”を利用し、インストールするファイルまたはファイル群に条件を設定することで実現できる。
この説明では、ヘルプファイルにインストール条件を設定するとして説明する。
1.条件を設定するファイルの確認
インストールデザイナから「編成」->「コンポーネント」を選択、ビュー画面から「コンポーネント」->「AllOtherFiles」->「ファイル」を選択する。ここでヘルプファイルがコンポーネントに登録されていることを確認する。
2.条件の設定
再びビューの「コンポーネント」->「AllOtherFiles」と選択するとプロパティが現れる。
3.インストール条件を設定する。
プロパティ「条件」のプロパティボタンを押すと、条件ビルダが起動するので条件を設設定する。ここでは、先に設定した“P-Tool”の有無によるリモートPCプロパティ“REMOTE_PC”を使用する。
“P-Tool.txt”が存在する場合、“REMOTE_PC”プロパティにはファイルへのパスが入力されるため、それを評価する式を“REMOTE_PC <> “””を設定する。
4.動作確認
P-Tool.txtが存在する場合
TestHelp.txtがインストールされた。
P-Tool.txtが無い場合
TestHelp.txtがインストールされない。
InstallShield インストール先に任意のファイルが存在するか確認する方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
先にインストールされているアプリケーションによって、新たにインストールする内容を変更する必要がある時がある。特にレジストリに情報のないアプリケーションがインストールされている時に、ハードディスク上のEXEファイルを検索して、インストール先の環境を確認する場合に利用する。
これは”システム検索ウィザード”を使用して実現できる。
1.インストールデザイナから「動作とロジック」->「システム検索」を選択する。
2.システム検索ビューの上でマウスを右クリックすると現れるダイアログから“追加”を選択すると、システム検索ウィザードが起動する。「次へ」ボタンを押す。
3.検索対象する対象を指定する。
“ファイル パス(ファイルを検索)”を選択する。「次へ」ボタンを押す。
4.ファイルの詳細とその検索場所を指定する。
“ファイル名”を検索する実行ファイル名、“検索先”を“すべてのドライブを検索する”にチェックする、そして“検索するサブフォルダの最大数”はディフォルトの10ままとした。「次へ」ボタンを押す。
5.この値の処理方法を指定する。
“値を保持するプロパティ”を“REMOTE_PC”とし、この値によりインストール条件を変更するため、“プロパティに値を保存し、インストール条件でこのプロパティを使用”にチェックを入れる。「完了」ボタンを押す。
6.条件ビルダで条件を設定する。
メッセージを入力して「OK」ボタンを押す。
7.完了
インストール条件分岐用のプロパティ“REMOTE_PC”が登録される。