┏第59号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ──<メニュー>─────────────────────── ■.NET Tips ・インストール時にインストール先のフォルダパスをレジストリに書 き込む ・アドバタイズショートカットではなく、普通のショートカットを作 成する ・環境変数Pathにパスを追加する ・インストール終了後に再起動する ・インストール時にログファイルを作成する ・サイレントインストールを行う ─────────────────────────────── ─────────────────────────────── ■.NET Tips ─────────────────────────────── VS.NETのデプロイメントプロジェクトにおけるTipをいくつか紹介し ます。 ●インストール時にインストール先のフォルダパスをレジストリに書き込む インストール時にレジストリに値を書き込むには、VS.NETのレジスト リエディタを使用します。このレジストリエディタで追加できる名前 や値にはWindows Installerのプロパティを使用できるようなので(ヘ ルプには明記されていないようですが)、インストール先のフォルダ パスを表す[TARGETDIR]プロパティを利用して、レジストリエディタ に値を追加すればよいでしょう。 具体的な方法を示します。ここでは、レジストリキー「HKCU \Software\[Manufacturer]\[ProductName]」に名前「Path」で値がイ ンストールしたパスとなる値を書き込むようにします。例えばデプロ イメントプロジェクトのManufacturerプロパティが「既定の会社名」 でProductNameプロパティが「Setup1」の場合は、「HKCU\Software\ 既定の会社名\Setup1」というキーに書き込まれます。 まず、レジストリエディタを開きます。ソリューションエクスプロー ラーでデプロイメントプロジェクトを右クリックしてコンテキストメ ニューを表示し、「表示」-「レジスト」を選択すればレジストリエ ディタが開きます。 次にレジストリキー「HKCU\Software\[Manufacturer]\[ProductName]」 を作成します。レジストリエディタの左側のツリーで「HKCU \Software\[Manufacturer]」を右クリックし、メニューから「新規作 成」-「キー」を選択してキーを作成します。そのキーの名前を、「 [ProductName]」に変更します。 それから、このキーに値を追加します。ツリーで「HKCU\Software \[Manufacturer]\[ProductName]」を選択してから、右側のペインで 右クリックしてメニューを表示します。ここで「新規作成」-「文字 列の値」を選択し、追加される値のNameプロパティを「Path」、 Valueプロパティを「[TARGETDIR]」とします。 これでインストールしたパスがレジストリに書き込まれるようになり ます。 ●アドバタイズショートカットではなく、普通のショートカットを作成する VS.NETの「ファイルシステムエディタ」を使用することにより、イン ストール時にショートカットを作成することが簡単にできますが、こ のようにして作成されるショートカットはアドバタイズショートカッ ト(Advertisable shortcut)となります。 アドバタイズショートカットはリンク先のファイルが存在しなくても 実行することができるというWindows Installerの優れた機能ですが、 困ったことも多々あります。普通のショートカットでは、エクスプロー ラからファイルをドロップすると、そのファイルのパスをコマンドラ イン引数にしてリンク先のアプリケーションを実行しますが、アドバ タイズショートカットではこれができません。よって、Windowsの「送 る」フォルダにショートカットを作成しても正常に機能しませんし、 デスクトップにシュートカットを作成してこのシュートカットにファ イルをドロップすることによってアプリケーションを起動するといっ たこともできません。 ここではアドバタイズショートカットではなく、普通のショートカッ トを作成する方法を幾つか紹介します。 一番簡単な方法は、DISABLEADVTSHORTCUTSプロパティを設定すること でしょう。これにより、アドバタイズショートカットが作成されなく なります。 [URL]DISABLEADVTSHORTCUTS Property http://msdn.microsoft.com/library/en-us/msi/setup/disableadvtshortcuts.asp DISABLEADVTSHORTCUTSプロパティを設定する方法としては、msiexec のコマンドライン引数で指定するか、Windows Installerデータベー スのPropertyテーブルで指定するかということになります。 msiexecのコマンドライン引数で指定する方法とは、MSIファイルをイ ンストールするときに次のようなコマンドを使用する方法です。 msiexec /i (MSIファイル名) DISABLEADVTSHORTCUTS=1 Windows InstallerデータベースのPropertyテーブルで指定する方法 とは、OrcaでMSIファイルを開き、PropertyテーブルにProperty「 DISABLEADVTSHORTCUTS」、Value「1」の行を追加する方法です。 このようにDISABLEADVTSHORTCUTSプロパティを使った方法では、すべ てのショートカットが通常のショートカットとなります。特定のシュー トカットのみ普通のシュートカットにするには、Windows Installer データベースのShortcutテーブルをいじることになります。 まず、MSIファイルをOrcaで開き、Shortcutテーブルを表示します。 そこで普通のシュートカットにしたい設定の行を探し、Target列をシ ョートカットのリンク先のパス(通常は「[TARGETDIR]\<ファイル名>」) に変更します。さらに、Icon_列を空白にします。これで保存すれば 完了です。 ●環境変数Pathにパスを追加する 環境変数に変数を追加、変更、削除するには、Windows Installerデー タベースのEnvironmentテーブルを使います。このEnvironmentテーブ ルはVS.NETで操作できませんので、Orcaなどを使って編集する必要が あります(さもなくば、カスタムアクションを使うことになるでしょ う)。ここでは具体的に環境変数Pathにインストールしたパスを追加 する方法を説明します。 まずMSIファイルをOrcaで開きます。そして、Environmentテーブルに 次のような行を追加します。なお詳しくは、ヘルプをご覧ください。 [URL]Environment Table http://msdn.microsoft.com/library/en-us/msi/setup/environment_table.asp ‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Environment Path Name *=-Path Value [~];[TARGETDIR] Component_ Enviroment ‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 補足:NT系OSではName列の先頭に「*」を付けるとシステム環境変数 に書き込まれ、付けないとユーザー環境変数に書き込まれます。詳し くはヘルプのRemarksをご覧ください。 またComponentテーブルに次のような行を追加します。 ‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Component Enviroment ComponentID (適当なGUID) Directory_ TARGETDIR Attributes 0 ‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ さらにFeatureComponentsテーブルに次のような行を追加します。 ‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Feature_ DefaultFeature Component_ Enviroment ‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ これで保存すればOKです。 また、環境変数の値を取得するには、「[%(環境変数の名前)]」の ようにします。例えばカスタム動作のCustomActionDataプロパティに より環境変数Pathを取得するには、CustomActionDataに「[%Path]」 と指定します。 [URL]Formatted http://msdn.microsoft.com/library/en-us/msi/setup/formatted.asp ●インストール終了後に再起動する インストール後(あるいはインストール中)にシステムの再起動を行 うには、スタンダードアクションのScheduleRebootやForceRebootを 使います。ScheduleRebootはインストールの最後に再起動し、 ForceRebootは途中でも再起動できます。VS.NETではこれらのアクシ ョンを追加することはできませんので、これらを使うにはOrcaを使用 します。 [URL]System Reboots http://msdn.microsoft.com/library/en-us/msi/setup/system_reboots.asp [URL]ScheduleReboot Action http://msdn.microsoft.com/library/en-us/msi/setup/schedulereboot_action.asp [URL]ForceReboot Action http://msdn.microsoft.com/library/en-us/msi/setup/forcereboot_action.asp 性格上、ForceRebootの方が使い方が難しいので、ここでは ScheduleRebootをInstallExecuteSequenceテーブルに挿入することに します。 まずOrcaでMSIファイルを開き、InstallExecuteSequenceテーブルを 表示します。ヘルプによると、ScheduleRebootの挿入位置は、通常は 最後ですが、どこでもよいということです。よって、ここでは次のよ うな行をInstallExecuteSequenceに追加します。 ‥‥▽ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Action ScheduleReboot Condition Sequence 7000 ‥‥△ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ このようなMSIファイルを実行すると、インストール終了後に再起動 を求めるダイアログが表示されます。ユーザーはここで再起動しない ように選択することもできます。サイレントインストールのときは、 自動的に再起動されます。 この例ではアンインストール時にも再起動を求めるダイアログが表示 されますが、これを防ぐには、Conditionに「NOT REMOVE~="ALL"」を 指定します。 これ以外の方法としては、REBOOTプロパティに「Force」を指定する 方法もあります。例えば、MSIファイルをインストールするときに次 のようなコマンドを使用し、プロパティを指定します。 msiexec /i (MSIファイル名) REBOOT=Force [URL]REBOOT Property http://msdn.microsoft.com/library/en-us/msi/setup/reboot.asp 補足:Windows Installer 3.0以降では、「/forcerestart」コマンド ラインオプションによっても可能です。 [URL]Standard Installer Command-Line Options http://msdn.microsoft.com/library/en-us/msi/setup/standard_installer_command_line_options.asp 再起動の確認ダイアログを表示しないで再起動されるようにするには、 さらに「REBOOTPROMPT=Suppress」を追加します。 msiexec /i (MSIファイル名) REBOOT=Force REBOOTPROMPT=Suppress [URL]REBOOTPROMPT Property http://msdn.microsoft.com/library/en-us/msi/setup/rebootprompt.asp 逆に再起動をしないようにするには、REBOOTプロパティを「 ReallySuppress」とします(Windows Installer 3.0以降では、「 /norestart」コマンドラインオプションによっても可能です)。 ●インストール時にログファイルを作成する インストーラが思ったとおりに機能しない場合には、ログファイルを 作成すると役に立ちます。 msiexec.exeでは、「/l」コマンドラインオプションにより、ログフ ァイルを作成することができます。「/l*vx」とすると、すべての情 報がログに記録されます。 例えば、 msiexec /i Setup1.msi /l*vx logfile.txt のようなコマンドでは、Setup1.msiをインストールする時にログをフ ァイル「logfile.txt」に保存します。 [URL]Command-Line Options http://msdn.microsoft.com/library/en-us/msi/setup/command_line_options.asp また、レジストリを書き換えることにより、Windows Installerのす べてのログをファイルに保存することもできます。レジストリの「 HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows \Installer 」に文字列の値「Logging」、値「voicewarmup」を追加することによ り、一時フォルダに「Msi」で始まり「.log」で終わるファイル名の ログファイルが作成されるようになります。詳しくは、次のリンク先 をご覧ください。 [URL]Windows インストーラのログの記録を有効にする方法 http://support.microsoft.com/kb/q223300/ ●サイレントインストールを行う ユーザーインターフェイスを表示しないサイレントインストールを行 う方法は、第55号で紹介しました。つまり、「/qn」コマンドライン オプションを使用します。 msiexec /i Setup1.msi /qn 補足:Windows Installer 3.0以降では、「/quiet」コマンドライン オプションによっても可能です。 ちなみに、「/qb!」コマンドラインオプションにより、ユーザーイン ターフェイスの「キャンセル」ボタンを隠す(プログレスバーのみを 表示する)ことができます。 =============================== ■ここで示したコードの多くはまずC#で書き、それを「C# to VB.NET Translator」でVB.NETのコードに変換し、修正を加えたものです。 [URL]C# to VB.NET Translator http://authors.aspalliance.com/aldotnet/examples/translate.aspx ■このマガジンの購読、購読中止、バックナンバー、説明に関しては  次のページをご覧ください。  http://www.mag2.com/m/0000104516.htm ■発行人・編集人:どぼん!  (Microsoft MVP for Visual Basic, Oct 2004-Oct 2005)  http://dobon.net  dobon_info@yahoo.co.jp ■ご質問等はメールではなく、掲示板へお願いいたします。  http://dobon.net/vb/bbs.html ■上記メールアドレスへのメールは確実に読まれる保障はありません  (スパム、ウィルス対策です)。メールは下記URLのフォームメール  から送信してください。  http://dobon.net/mail.html Copyright (c) 2003 - 2005 DOBON! All rights reserved. ===============================