none
今でも、msmファイルは作る必要がありますか? RRS feed

  • 質問

  • 自分で作っているDLLファイルがあります。
    side by side ということになり、DLLは実行ファイルと一緒の場所です。
    msmファイルを作る意義がよく分かりません。

    外部の利用しているファイルはDLL しかありませんが、何の問題もありません。
    よく分からないことは出来たら止めたいのですが、何か問題がありますか?
    2014年10月9日 9:39

回答

  • msm(マージモジュール)がなにか?ということと、何のために存在するか?について改めて、学習してはいかがでしょう?

    きちんとした解説書を書くと、簡単な導入部分だけでも一章くらいにはなる程度の大変ボリュームのある仕組みです(SDKにすらきちんと出ていないようなものもたくさんある)ので、かなりざっくりとしたことだけ書いておきます。

    平たく言えば、msmはWindowInstaller用共有ライブラリです。共有の概念は、システムグローバルに一意であるか?なので、そうではないなら、おそらく必要ありません。

    一般的にmsmを作る必要があるのは...

    • VCランタイムなど、システムフォルダや共有フォルダにインストールされるDLL
    • フォントファイル
    • ActiveX Control

    など、任意の製品にバンドルされ、なおかつ誰がどういう使い方をしたいという場合でもいつも同じものであることを担保する者にのみ利用します。

    複数のアプリから利用される場合でも、アプリケーションのローカルフォルダにインストールされるものはMSMとして提供すると、WindowsInstaller の動作遅延の要因になってしまうので、避けるべき事例の一つとなっています。

    ちなみに、社外に出ない場合でも、上記のモジュールについてはマージモジュールにするか、同等のライブラリ(WiXのwixlibのようなもの)を用意することをお勧めします。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月10日 9:53
  • 昔、msm(マージモジュール)ついて、MSのマニュアルを
    読みましたが、分からないまま今に至っています。
    今回もすぐにキチント理解できそうにもありません。

    以下のようなことでしたら、
    マージモジュールは必要ないということで良いですか?

    厳しいことを書きますが、テクノロジーがよく理解できない、そのために決断を第三者にゆだねるという行為は本当に問題ないのでしょうか?
    たとえば、私やとっちゃんさんが何らかの方向性を示したとして、その責任はあなたが負います。
    ここで言う責任とは、何らかのトラブルが発生したときに、その損失・障害への解決を担うということです。

    ある回答が示されたとして、その回答に至る背景・理由を理解せずに、責任を負えるものなのでしょうか?

    Ocx は第三者には利用させない。
    DLL は Exeファイルのあるディレクトリに置く、
    または、OSのPathで指定したところ(利用する人が管理する)におく。

    環境変数 PATH が登場した時点で正直、よくわからないとしか答えられないでしょう。

    第三者に利用させるかどうかも因子ではありますが、別に第三者に限らず、自分、あるいは自分たちの組織がそのライブラリを再利用するか、再利用するとして配置場所をどうするかといった話が絡んでくるわけですので、ここにある情報では足りないでしょうね。

    利用しているアプリケーションレベルの沢山のDLLがマージモジュールが無い場合、
    自分のDLLのマージモジュールを使っても、あまり意味がないと思いますが、どうでしょうか?

    何とも言えません。
    「ほかの DLL がやってないから、今回の DLL もやる意味がない」は論理的に導けません。
    「今回の DLL が前述のような観点でどうなのか」が焦点ですので。

    最後に、フォーラムはコンサルティングを受ける場所ではありません。
    情報提供や助言をもらえる可能性はありますが、あなたの置かれた状況、要求などを整理して適切な判断をするのはあなたです。
    その判断をゆだねたいのであれば、コンサルティング業務を請け負うところに頼んでください。

    (とっちゃんさんがわかりやすい情報を提供してくれていると思いますので、それに照らせば、ご自身で判断できるのではないのでしょうか?)
    2014年10月11日 7:04
    モデレータ
  • 自作 DLL に対するマージモジュールの作成は、その DLL を第三者が使う場合が中心となると思います。
    DLL と EXE のビルド環境の違いからランタイムを含む形のインストーラーをうまく作れず、マージモジュールを介することもありますが、まれかもしれません。

    依存関係をうまく抽出でき、問題なくインストーラーが作れ、アプリケーションと同じフォルダーに配置するつもりならあえてマージモジュールを作るメリットはほとんどないと考えます。

    2014年10月9日 13:18
    モデレータ
  • 一部繰り返しになりますが、依存関係が抽出でき、レジストリ登録を含む配置に問題がなく、さらにそのモジュールを別のインストーラーにも組み込むということがなければマージモジュールの出番はないかと思います。

    それが、DLL か OCX かはあまり関係ないでしょう。

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月10日 3:32
    モデレータ
  • マージモジュールについての前に、WindowsInstallerの世界のComponentの原則というものを理解する必要があります。

    手前味噌で申し訳ないですが、

    http://www.wankuma.com/seminar/20070818osaka12/Default.aspx

    で、やったセッションあたりで本当にざっくりとですが、しゃべってますので、参考にできるかな?と思います。

    マージモジュールの話はありませんが、WindowsInstallerで知っておくべき最小限のことのさわり程度のことはしゃべってます。

    あとは、Azleanさんもいうように、自分の環境、提供しようとしているもののあるべき姿、などを照らし合わせていけば、おのずと答えは導き出せると思います。

    ちなみに、

    >Ocx は第三者には利用させない。
    >DLL は Exeファイルのあるディレクトリに置く、
    >または、OSのPathで指定したところ(利用する人が管理する)におく。

    >利用しているアプリケーションレベルの沢山のDLLがマージモジュールが無い場合、
    >自分のDLLのマージモジュールを使っても、あまり意味がないと思いますが、どうでしょうか?

    については、Component の原則を理解していればおのずと答えは出せます。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月11日 8:37

すべての返信

  • 自作 DLL に対するマージモジュールの作成は、その DLL を第三者が使う場合が中心となると思います。
    DLL と EXE のビルド環境の違いからランタイムを含む形のインストーラーをうまく作れず、マージモジュールを介することもありますが、まれかもしれません。

    依存関係をうまく抽出でき、問題なくインストーラーが作れ、アプリケーションと同じフォルダーに配置するつもりならあえてマージモジュールを作るメリットはほとんどないと考えます。

    2014年10月9日 13:18
    モデレータ
  • ocx に関しても同様のことが言えますか?

    メインのDLLだけは、msm ファイルにしていましたが、
    利用している外部のDLLや、外部のソースコードで作ったDLLは
    msmを作っていませんでした。
    それで、問題と思ったことがありませんでしたので、作る必要はなさそうですね。

    (相手を把握できないような第三者ではありませんが、第三者も使うことがあります。)


    2014年10月10日 0:59
  • 一部繰り返しになりますが、依存関係が抽出でき、レジストリ登録を含む配置に問題がなく、さらにそのモジュールを別のインストーラーにも組み込むということがなければマージモジュールの出番はないかと思います。

    それが、DLL か OCX かはあまり関係ないでしょう。

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月10日 3:32
    モデレータ
  • msm(マージモジュール)がなにか?ということと、何のために存在するか?について改めて、学習してはいかがでしょう?

    きちんとした解説書を書くと、簡単な導入部分だけでも一章くらいにはなる程度の大変ボリュームのある仕組みです(SDKにすらきちんと出ていないようなものもたくさんある)ので、かなりざっくりとしたことだけ書いておきます。

    平たく言えば、msmはWindowInstaller用共有ライブラリです。共有の概念は、システムグローバルに一意であるか?なので、そうではないなら、おそらく必要ありません。

    一般的にmsmを作る必要があるのは...

    • VCランタイムなど、システムフォルダや共有フォルダにインストールされるDLL
    • フォントファイル
    • ActiveX Control

    など、任意の製品にバンドルされ、なおかつ誰がどういう使い方をしたいという場合でもいつも同じものであることを担保する者にのみ利用します。

    複数のアプリから利用される場合でも、アプリケーションのローカルフォルダにインストールされるものはMSMとして提供すると、WindowsInstaller の動作遅延の要因になってしまうので、避けるべき事例の一つとなっています。

    ちなみに、社外に出ない場合でも、上記のモジュールについてはマージモジュールにするか、同等のライブラリ(WiXのwixlibのようなもの)を用意することをお勧めします。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月10日 9:53
  • 昔、msm(マージモジュール)ついて、MSのマニュアルを
    読みましたが、分からないまま今に至っています。
    今回もすぐにキチント理解できそうにもありません。

    以下のようなことでしたら、
    マージモジュールは必要ないということで良いですか?

    Ocx は第三者には利用させない。
    DLL は Exeファイルのあるディレクトリに置く、
    または、OSのPathで指定したところ(利用する人が管理する)におく。

    利用しているアプリケーションレベルの沢山のDLLがマージモジュールが無い場合、
    自分のDLLのマージモジュールを使っても、あまり意味がないと思いますが、どうでしょうか?

    2014年10月11日 6:51
  • 昔、msm(マージモジュール)ついて、MSのマニュアルを
    読みましたが、分からないまま今に至っています。
    今回もすぐにキチント理解できそうにもありません。

    以下のようなことでしたら、
    マージモジュールは必要ないということで良いですか?

    厳しいことを書きますが、テクノロジーがよく理解できない、そのために決断を第三者にゆだねるという行為は本当に問題ないのでしょうか?
    たとえば、私やとっちゃんさんが何らかの方向性を示したとして、その責任はあなたが負います。
    ここで言う責任とは、何らかのトラブルが発生したときに、その損失・障害への解決を担うということです。

    ある回答が示されたとして、その回答に至る背景・理由を理解せずに、責任を負えるものなのでしょうか?

    Ocx は第三者には利用させない。
    DLL は Exeファイルのあるディレクトリに置く、
    または、OSのPathで指定したところ(利用する人が管理する)におく。

    環境変数 PATH が登場した時点で正直、よくわからないとしか答えられないでしょう。

    第三者に利用させるかどうかも因子ではありますが、別に第三者に限らず、自分、あるいは自分たちの組織がそのライブラリを再利用するか、再利用するとして配置場所をどうするかといった話が絡んでくるわけですので、ここにある情報では足りないでしょうね。

    利用しているアプリケーションレベルの沢山のDLLがマージモジュールが無い場合、
    自分のDLLのマージモジュールを使っても、あまり意味がないと思いますが、どうでしょうか?

    何とも言えません。
    「ほかの DLL がやってないから、今回の DLL もやる意味がない」は論理的に導けません。
    「今回の DLL が前述のような観点でどうなのか」が焦点ですので。

    最後に、フォーラムはコンサルティングを受ける場所ではありません。
    情報提供や助言をもらえる可能性はありますが、あなたの置かれた状況、要求などを整理して適切な判断をするのはあなたです。
    その判断をゆだねたいのであれば、コンサルティング業務を請け負うところに頼んでください。

    (とっちゃんさんがわかりやすい情報を提供してくれていると思いますので、それに照らせば、ご自身で判断できるのではないのでしょうか?)
    2014年10月11日 7:04
    モデレータ
  • マージモジュールについての前に、WindowsInstallerの世界のComponentの原則というものを理解する必要があります。

    手前味噌で申し訳ないですが、

    http://www.wankuma.com/seminar/20070818osaka12/Default.aspx

    で、やったセッションあたりで本当にざっくりとですが、しゃべってますので、参考にできるかな?と思います。

    マージモジュールの話はありませんが、WindowsInstallerで知っておくべき最小限のことのさわり程度のことはしゃべってます。

    あとは、Azleanさんもいうように、自分の環境、提供しようとしているもののあるべき姿、などを照らし合わせていけば、おのずと答えは導き出せると思います。

    ちなみに、

    >Ocx は第三者には利用させない。
    >DLL は Exeファイルのあるディレクトリに置く、
    >または、OSのPathで指定したところ(利用する人が管理する)におく。

    >利用しているアプリケーションレベルの沢山のDLLがマージモジュールが無い場合、
    >自分のDLLのマージモジュールを使っても、あまり意味がないと思いますが、どうでしょうか?

    については、Component の原則を理解していればおのずと答えは出せます。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク クサキ 2014年10月13日 18:25
    2014年10月11日 8:37
  • 今回の助言を踏まえ、もう一度勉強ようと思います。
    Azleanさん、とっちゃんさんありがとうございました。
    2014年10月13日 18:24