>

2012年2月27日月曜日

Windowsインストーラでインストールしたアプリを起動するたびに"インストールの準備中..."が出てしまう件

VisualStudio2008のセットアッププロジェクトで自分のアプリのインストーラ(msi)を作ったときに二、三分かったことがあるのでメモ。

  • アプリのアンインストール時には使用したレジストリも削除するようにしたい。
    セットアッププロジェクトの項目を右クリックしてコンテキストメニューから表示->レジストリを選択。表示されるウィンドウでアプリケーションで使いたいレジストリのキー(ファイルシステムで言うフォルダに該当するもの。)を作成する。その項目のプロパティでDeleteAtUninstallをTrueに設定する。
    この設定をした場合は同時にAlwaysCreateもTrueに設定したほうがよい。理由は次項で書く。

  • なんだかよく分からないが作成したインストーラを使ってインストールすると、アプリを起動するたびにインストーラのダイアログが一瞬ちらりと現れ「インストールの準備中」みたいなメッセージが表示される。
    僕が経験した範囲では、アプリをショートカット(厳密にはアドバタイズショートカット)から起動したときに所定のレジストリキーがないとWindowsがそれを検知してインストーラを起動してしまうようだ。一応修復作業という位置づけらしい。
    所定のレジストリキーというのはインストーラを作成するセットアッププロジェクトにて作成したレジストリ項目のことである。この問題は特にインストール時に作成しない(セットアッププロジェクトでのレジストリキーのプロパティAlwaysCreateがFalseになっている)もののアンインストール時には削除する (セットアッププロジェクトでのレジストリキーのプロパティDeleteAtUninstallがFalseになっている)設定になっているとなんだか問題だと思うらしくて上のような事態になる。
    なので解決策は前項の最後に述べたようにセットアッププロジェクトでDeleteAtUninstallをTrueにした場合は一緒にAlwaysCreateもTrueにしてやることで解決する。

  • アプリのアンインストール時には記録したデータファイルも削除したい。
    セットアッププロジェクトの項目を右クリックしてコンテキストメニューから表示->ファイルシステムを選択。表示されるダイアログで記録するデータファイルと同名のファイル(空ファイルでもデータ数が0のファイルでもよい。)を作り、さらにそのプロパティでPermanentをFalse(デフォルトのまま)に設定しておけばアンインストール時に削除してくれる。

  • アプリのデータを適切な場所に保存したい。
    普通にアプリのデータを保存したいときは多分C:\Users\USER_NAME\AppData\Localに保存したくなるもんだと思っている。詳細はMicrosoftのページをググって調べてみてください。で、この前項のようなことをやる場合にはこのフォルダに空のファイルを作成しておきたいのだが次の手順で設定できる。
    1. セットアッププロジェクトの項目を右クリックしてコンテキストメニューから表示->ファイルシステムを選択。
    2. 表示されるダイアログで右クリックして「特別なフォルダの追加->カスタムフォルダ」を選択。作ったフォルダのプロパティに
      [LocalAppDataFolder]\[Manufacturer]\[ProductName]
      と書く。 LocalAppDataFolderとManufacturerあたりがミソ。
といった具合だが、とりあえずいろいろいじって発見したことのメモであり、アプリ更新時にどうなるかなど細かいテストをしたわけではないので上記をヒントに後は各自で調べて分かったことがあればコメントをいただけますと幸いです。

0 件のコメント: