none
VisualStudio2005のセットアッププロジェクトについて RRS feed

  • 質問

  • VisualStudio2005のセットアッププロジェクトを使ってインストーラを作成しているのですが、2点ばかり質問です。

     

    1.インストーラでデスクトップに作ったショートカットが、妙なショートカットになります。まず、D&Dを受け付けません。プロパティの設定項目がほとんど灰色です。それに互換性タブもありません。普通のショートカットを作る方法はありますか?

     

    2.プロパティのInstallAllUsersの設定がまったく効かないようにように思うのですが、これを有効になるようにするにはどうすればよいのでしょうか? これをTRUEにしても、FALSEにしても、インストーラが起動すると、全てのユーザーが選択されています。

     

    よろしくお願いします。

     

    2007年6月11日 18:10

回答

  • 回答ありがとうございます。

     

     とっちゃん さんからの引用

    こちらは、Advertised Shortcut と呼ばれる WindowsInstaller の特殊ショートカットです。通常 msi 形式でインストールしたものはこの形式になります。変更も可能ですが、VSセットアップではサポートしていないので、ビルド後にORCAなどで、手書きでターゲットパスを変更する形になります。

     

     

    なるほど、そういう形式のショートカットがあるのですか。ORCAについて検索したところ、MSの技術情報がでてきますね。ORCAは使ったことはありませんが(というか、これを読んではじめて存在を知りましたが)調べてみます。去年別のアプリの開発をしていたときにも悩んだ現象なんですが、そのときは自前のショートカット作成・削除ツールをインストーラから実行して、逃げました。ただ、自前のその手のツールをインストーラから呼ぶ形だと、Vistaで色々問題が出る(可能性が高い)ことが、その後わかったので、今回どういう手を使うか思案中といったところです。ORCAか自前ツールか簡単なほうで対処したいと思います。

     

     とっちゃん さんからの引用

    こちらは、再現できませんでした。開発環境、テスト環境の詳細を教えていただけませんか?

    通常は、ユーザーインターフェースのインストールフォルダのプロパティのInstallAllUsersVisible を True にしておき、プロジェクトのプロパティのInstallAllUsers を True にすればすべてのユーザー、False にすればこのユーザーのみとなるはずなのですが?

     

    実際にインストールまでは試していませんが、私の環境では上記の設定はきちんと反映されていました。

     

     

    この現象も去年の別アプリのときに出ておりましたが、そのときは不特定多数に配布することは結局なかったので、放置しました。現在の開発環境は、Windows XP Pro SP2 MSのアップデートは全て適用済み。Visual Sutio 2005はSP1(去年の開発のときはSP1は出てなかったのでSP1はあてていません)。今も確認してみましたが、InstallAllUsersがFALSEになっているにもかかわらず、すべてのユーザーが選択されています。また、別のPC(Windows XP ProとWindows Vista)で確認してみましたが、同じです。Windows Vistaの別PCにはVSは入っていません。

    そういうわけで、InstallAllUsersVisibleをFALSEにすると、InstallAllUsersの設定にかかわらず、無条件ですべてのユーザーでインストールされてしまい、現状、このユーザーでインストールさせるには、InstallAllUsersVisibleをTRUEにして、ユーザーに変更させるしか方法がない状況です。(これも、ORCAで解決できるのかもしれませんけど)

     

    2007年6月12日 9:48

すべての返信

  •  Miyaan01 さんからの引用

    1.インストーラでデスクトップに作ったショートカットが、妙なショートカットになります。まず、D&Dを受け付けません。プロパティの設定項目がほとんど灰色です。それに互換性タブもありません。普通のショートカットを作る方法はありますか?

    こちらは、Advertised Shortcut と呼ばれる WindowsInstaller の特殊ショートカットです。通常 msi 形式でインストールしたものはこの形式になります。変更も可能ですが、VSセットアップではサポートしていないので、ビルド後にORCAなどで、手書きでターゲットパスを変更する形になります。

     

    2.プロパティのInstallAllUsersの設定がまったく効かないようにように思うのですが、これを有効になるようにするにはどうすればよいのでしょうか? これをTRUEにしても、FALSEにしても、インストーラが起動すると、全てのユーザーが選択されています。

    こちらは、再現できませんでした。開発環境、テスト環境の詳細を教えていただけませんか?

    通常は、ユーザーインターフェースのインストールフォルダのプロパティのInstallAllUsersVisible を True にしておき、プロジェクトのプロパティのInstallAllUsers を True にすればすべてのユーザー、False にすればこのユーザーのみとなるはずなのですが?

     

    実際にインストールまでは試していませんが、私の環境では上記の設定はきちんと反映されていました。

    2007年6月12日 5:45
  • 回答ありがとうございます。

     

     とっちゃん さんからの引用

    こちらは、Advertised Shortcut と呼ばれる WindowsInstaller の特殊ショートカットです。通常 msi 形式でインストールしたものはこの形式になります。変更も可能ですが、VSセットアップではサポートしていないので、ビルド後にORCAなどで、手書きでターゲットパスを変更する形になります。

     

     

    なるほど、そういう形式のショートカットがあるのですか。ORCAについて検索したところ、MSの技術情報がでてきますね。ORCAは使ったことはありませんが(というか、これを読んではじめて存在を知りましたが)調べてみます。去年別のアプリの開発をしていたときにも悩んだ現象なんですが、そのときは自前のショートカット作成・削除ツールをインストーラから実行して、逃げました。ただ、自前のその手のツールをインストーラから呼ぶ形だと、Vistaで色々問題が出る(可能性が高い)ことが、その後わかったので、今回どういう手を使うか思案中といったところです。ORCAか自前ツールか簡単なほうで対処したいと思います。

     

     とっちゃん さんからの引用

    こちらは、再現できませんでした。開発環境、テスト環境の詳細を教えていただけませんか?

    通常は、ユーザーインターフェースのインストールフォルダのプロパティのInstallAllUsersVisible を True にしておき、プロジェクトのプロパティのInstallAllUsers を True にすればすべてのユーザー、False にすればこのユーザーのみとなるはずなのですが?

     

    実際にインストールまでは試していませんが、私の環境では上記の設定はきちんと反映されていました。

     

     

    この現象も去年の別アプリのときに出ておりましたが、そのときは不特定多数に配布することは結局なかったので、放置しました。現在の開発環境は、Windows XP Pro SP2 MSのアップデートは全て適用済み。Visual Sutio 2005はSP1(去年の開発のときはSP1は出てなかったのでSP1はあてていません)。今も確認してみましたが、InstallAllUsersがFALSEになっているにもかかわらず、すべてのユーザーが選択されています。また、別のPC(Windows XP ProとWindows Vista)で確認してみましたが、同じです。Windows Vistaの別PCにはVSは入っていません。

    そういうわけで、InstallAllUsersVisibleをFALSEにすると、InstallAllUsersの設定にかかわらず、無条件ですべてのユーザーでインストールされてしまい、現状、このユーザーでインストールさせるには、InstallAllUsersVisibleをTRUEにして、ユーザーに変更させるしか方法がない状況です。(これも、ORCAで解決できるのかもしれませんけど)

     

    2007年6月12日 9:48
  • ORCA は、WindowsSDK または PlatformSDK に同梱されています。VS2005 なので今後のことも考慮してインストールはWindowsSDK をお勧めしたいところです。

    SDK をインストールしたら、インストール先の Bin ディレクトリにある Orca.msi を実行すれば ORCA をインストールできます。

     

    使い方は、WindowsInstaller のデータベースを知ることと同じなので、ちょっと苦労することになるとは思いますが...

     

     

    もう一つの、インストールユーザーの設定はちょっと分からないですね。元になるテンプレートが壊れてしまっているなどがあるのかも知れません。

    どこか適当なマシンに新規にVS2005をインストールしてみるなどで試してみた方がよいかも知れません。

     

    msi をいじくれば、修正は可能ですが、根治にはならないので開発環境を疑ってみた方が良いとおもいます。

     

    2007年6月12日 13:34
  • ご教授ありがとうございます。

    Windows SDKの中にあるのを見つけました。ちょっと弄くってみます。

     

    InstallAllUsersの件、あれから色々弄くって、原因らしきものがわかりました。プロジェクトにマージモジュールが含まれていると、InstallAllUsersの設定が無効になり、常にすべてのユーザーが選択されるようです。今回のインストーラはVC++で開発したアプリ用で、そのアプリがMFC80.DLLとMSVCR80.DLLに依存しているので、その依存関係があるマージモジュールが含まれています。まあ、マージモジュールのインストールは全ユーザー共通であるわけだけど、アプリはAllUsersの設定にしたくないってこともあるわけだし、どっちみちユーザーが「このユーザー」を選択すればオーバーライドされてしまうのだから、InstallAllUsersの設定を無効にする意味ってないような気がします(笑)。まあ、ちょっと理解しがたい仕様ですが(本当に仕様なのかな?)、原因らしきものはわかったので対策を考えたいと思います。

    2007年6月12日 17:23
  • Web検索を行った所、今回の問題をOrcaで修正する方法はあっさり出てきました。Orcaで見てみた所、msiのInstallAllUsersの設定にあたる部分は、あっさりALLUSERS=1になっておりました。このレコードを削除してテストしてみしたところ、このユーザーが選択され、マージモジュールのインストールも正常に行われ、アプリはユーザープロファイルにインストールされました。

     

    参考のため一応、書いておきます。Orcaで編集したmsiの挙動はMSでサポート対象外らしいので、するときは自己責任で。

     

    ・全てのユーザーの指定解除

    テーブル:Property

    レコード:ALLUSERS

    値:レコード削除

    注)値を0にしても解除できません。レコード削除する必要あり。

     

    ・全てのユーザーの指定

    テーブル:Property

    レコード:ALLUSERS

    値:1

    注)レコードがなければ作成する。

     

    ・インストーラにまかせる(可能であれば全てのユーザー、でなければこのユーザー)

    テーブル:Property

    レコード:ALLUSERS

    値:2

    注)レコードがなければ作成する。

     

    ・アドバタイズショートカットをやめる(普通のショートカットを作成する)

    テーブル:Property

    レコード:DISABLEADVTSHORTCUTS

    値:1

    注)レコードがなければ作成する。

    2007年6月13日 1:38