- PR -

MSI 3.1でのネットワークドライブへのインストール

1
投稿者投稿内容
funax
会議室デビュー日: 2002/09/05
投稿数: 8
投稿日時: 2007-11-14 22:56
こんにちは。

開発環境:WindowsXP Professional + VS2005 Professional Edition
インストール先:WindowsXP, Vista
インストーラ:WindowsInstaller 3.1

インストール処理として、ファイル配備の他にCustomActionを作成し、
ファイル編集処理等を実施しています。

作成したインストーラは、ローカルディスクには問題なくインストールできるの
ですが、ネットワークドライブへインストールを行うと、
「インストールを初期化中に例外が発生しました:
 System.IO.FileNotFoundException:ファイルまたはアセンブリ'file:///Y:\\XXX\\
CustomAction.dll'、またはその依存関係の1つが読み込めませんでした」
というエラーになります。

CustomActionを行わない(CustomAction.dllをインストールしない)場合は、
問題なくネットワークドライブにもインストールできます。

また、論理ドライブとしてローカルディスクを設定(Cドライブを共有し、Yドライブ
に設定)しても同様のエラーとなります。

インストーラexeがCustomAction.dllをロードする際に何か参照が未解決になる
ものがあるのかと思い、SDKのdependency walkerを使ってDLLを確認しましたが、
MSJAVA.DLLが見つからないと指摘はされますが、本来関係ないものだと思って
います。
(念のためMSJAVA.DLLをsystem32配下に配備したが結果はNG)

MSI 3.1を使用して開発する際にネットワークドライブ対応として何か設定する必要が
あるのでしょうか???

初歩的な質問かもしれませんが宜しくお願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-11-15 00:41
引用:

MSI 3.1を使用して開発する際にネットワークドライブ対応として何か設定する必要が
あるのでしょうか???



MSI 云々はあまり関係ありません。

.NET ランタイムのセキュリティ制限に引っ掛かっているように見えます。

インストーラが関与しなくても、ネットワークドライブ上に配置されたアセンブリは「イントラネット上に配置されている」と見なされ、デフォルトの構成でアセンブリのロードに失敗します。

これを避けるためには

・ネットワークドライブへの配置をあきらめる
・リスクと手間を承知で各PCの .NET ランタイムのセキュリティ設定を変更する
・ClickOnce など配布方法を再検討する

などの方策が考えられます。

funax
会議室デビュー日: 2002/09/05
投稿数: 8
投稿日時: 2007-11-15 05:27
引用:

渋木宏明(ひどり)さんの書き込み (2007-11-15 00:41) より:

.NET ランタイムのセキュリティ制限に引っ掛かっているように見えます。

インストーラが関与しなくても、ネットワークドライブ上に配置されたアセンブリは「イントラネット上に配置されている」と見なされ、デフォルトの構成でアセンブリのロードに失敗します。

これを避けるためには

・ネットワークドライブへの配置をあきらめる
・リスクと手間を承知で各PCの .NET ランタイムのセキュリティ設定を変更する
・ClickOnce など配布方法を再検討する

などの方策が考えられます。




渋木様
早速の返答ありがとうございます。

なるほどそういうことですか。。。

あまり期間がないので、機能制限をかける方向で考えるしかなさそうですね。
各PCのセキュリティ設定をインストール時に変更してもらうのは現実的では
なさそうですし。

しかし、世の中の多数の.NET2.0環境でネットワークインストールが可能な
製品、かつClickOnceでないものはどのように実現しているのでしょうか?
(インストーラでセキュリティ設定を変更しているのでしょうか?)

もし1つでも事例をご存知でしたら教えていただけるとありがたいです。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-15 07:03
設定はプログラムからいじることもできるので、大昔の私の質問を探せば、それらしいものが見つかります。

私はイントラだったのでやりましたが、販売用アプリケーションではやりません
やってるアプリケーションがあったら、その会社の製品は買わないことにしたいと思います
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-11-15 12:37
引用:

しかし、世の中の多数の.NET2.0環境でネットワークインストールが可能な
製品、かつClickOnceでないものはどのように実現しているのでしょうか?



そんな製品ありましたっけ?
なにか事例をご存知ですか?
funax
会議室デビュー日: 2002/09/05
投稿数: 8
投稿日時: 2007-11-16 16:07
Jitta様、渋木様、返答ありがとうございます。

Jitta様
引用:

設定はプログラムからいじることもできるので、大昔の私の質問を探せば、それらしいものが見つかります。
私はイントラだったのでやりましたが、販売用アプリケーションではやりません
やってるアプリケーションがあったら、その会社の製品は買わないことにしたいと思います


探して参照させてもらいました!

ネットワークインストール自体をさせないことは機能として必須ではないはずなので
問題ないのですが、今回インストーラとして採用しているMSI3.1ベースのインストーラ
だと、インストールフォルダ選択時にローカルディスクのみを選択肢として表示
させることができません。

そのため、ネットワークインストールがされた後に、CustomActionの実行で
エラーになるという非常に見栄えが悪い状態になってしまっています。
(Orcaでmsiをどこかいじればできる???)

基本的にはネットワークインストールは制限とし、顧客要望があまりに強ければ
プログラムはローカルに配置し、DB等リソースのみネットワーク側に入れる方向で
考えたいと思います。

渋木様
引用:

そんな製品ありましたっけ?
なにか事例をご存知ですか?



すいません、こちらの勘違いかも?
逆に、これまでネットワークインストールを許可していない製品に
出会ったことがなかったため、そう考えていました。
ネットワークインストールについて強く意識していた訳ではないので
見落としていたのかもしれません。


ちなみに教えていただいた情報を元に実機で検証したところ、
CustomAction.dllに署名を追加+アセンブリの信頼度を上げることで
ネットワークドライブでも動作しました。
ただ、インストール媒体としてはCustomAction.dllはsetup.exeに包含されるので
setup.exeに対して同様の対処を行えばインストーラでインストールしても
問題なく動作すると想定しています。

上記は検証のみで採用はしませんが。。。

見栄えよくネットワークドライブへのインストールをエラーにする(または
見せない)方式を調査したいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)