- PR -

ClicOnce実行時、.application が IE で開かれてしまう

投稿者投稿内容
とある根性なし
ベテラン
会議室デビュー日: 2006/08/15
投稿数: 54
投稿日時: 2006-08-15 21:42
はじめまして。よろしくお願いいたします。

開発言語:VB2005
開発OS:Windows2000
配置OS:Windows2000 Server
IIS Ver :IIS 5.0(実行環境では最新のものにするはずなので 6.0 になるかと)

上記の環境で、クリックワンスでインストールを行うアプリケーションの開発をしています。
最終的には、ユーザーの IIS に配置したいと思っているので、プロジェクトの発行タグの設定を、
発行先: publish\
インストール先 URL : "h"ttp://serverIP/AppName/publish/
として発行し、できあがったものを、
\\server\C\Inetpub\wwwroot\AppName/publish/
に手動で配置して、上記フォルダの AppName.htm を IE から呼び出しています。
クリックワンスの署名はしていますが、アセンブリの署名はしていません。

上記のやり方で、IE の“インストール”をクリックすると、AppName.application ファイルが XML で IE 上に表示されてしまい、インストールが実行されません。
なにか指定が間違っているのでしょうか?

ほぼ同様な事象が、参照元記事 URL で質問されていたので、
IIS の管理ツールから、AppName.htm と AppName.application の MIME に
application/x-ms-application application
text/xml manifest
という設定をしてみたのですが、うまくいきませんでした。
これについて加えて質問なのですが、MIME の設定が必要と言うことになれば、
IIS に発行してクリックワンスで配置するアプリケーションすべてに、この設定(正しい内容で)が必要なのでしょうか・・・
10本20本あったらやってられないですよね? 間違うかもしれませんし。

インストール先 URL の指定などは変わりますが、共有フォルダに配置して htm(のショートカット)をたたくやり方ではうまくいっています。

同じ事象で悩まれた方、解決方法をご存知の方、ぜひともお助けください。

[ メッセージ編集済み 編集者: とある根性なし 編集日時 2006-08-15 21:43 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-08-16 08:44
MIMEの設定は拡張子毎に設定すれば済むと思うので、アプリケーション単位での
作業は必要ないと思います。

http://msdn2.microsoft.com/ja-jp/library/ms165433.aspx
このあたりの情報でなんとかなりませんかね。
とある根性なし
ベテラン
会議室デビュー日: 2006/08/15
投稿数: 54
投稿日時: 2006-08-16 12:53
ご返答ありがとうございます。

参照URL の
「MIME 型のマッピング」

「.application ファイルに移動したときに、何も起こらないか、XML が IE に表示されるか、または [実行/名前を付けて保存] ダイアログが表示される」
に類する問題のようですね。

MIME に application を追加・再起動してみましたが、うまくいきませんでした。
サーバーには Framework をインストールしいない状態でテストしておりましたので、インストールしてやってみます。

また報告します。
とある根性なし
ベテラン
会議室デビュー日: 2006/08/15
投稿数: 54
投稿日時: 2006-08-16 22:41
お世話になっております。
別件で1日食われて何もできませんでした・・・
前レスから何も進んでいないのですが、質問させてください。

MSDNより抜粋
-------------------------------------------------------------------
問題 : .application ファイルに移動したときに、何も起こらないか、XML が IE に表示されるか、または [実行/名前を付けて保存] ダイアログが表示される
解決策 : サーバーまたはクライアントに MIME 型が正しく登録されていないことが原因と考えられます。

まず、サーバーの設定で、.application 拡張子が MIME 型 "application/x-ms-application" に関連付けられていることを確認します (詳細については、前の「サーバーの設定」を参照してください)。サーバーが正しく設定されていたら、次に、コンピュータに .NET Framework 2.0 がインストールされていることを確認します。インストールされているにもかかわらず問題が発生する場合は、Framework をアンインストールしてから再インストールし、クライアントに MIME 型を再登録します。
-------------------------------------------------------------------

とのことなのですが、
サーバーのMIMEの確認後、“コンピュータに .NET Framework 2.0 がインストールされていることを確認します”とありますが、これはクライアントのことを指すのでしょうか? サーバーなら、単純に配布側にも Framework が必要ということなのでしょうが、クライアントに必要であるなら、必須コンポーネントに Framework 指定する意味ないですよね? あらかじめ手動でインストールが必要ということになりますから。
そして最後の、“クライアントに MIME 型を再登録します。”とありますが、ClickOnceで配置する場合、クライアントにも IIS のインストールと MIME の設定が必要、ということでしょうか?

サーバー・クライアント共に IIS と Framework が必要で、かつ MIME の設定も必要なんてことになると、利点消滅・・・なんてことになる気がするのですが、ご解説いただけますでしょうか。
よろしくお願いします。
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2006-08-17 00:07
えっと、いくつか原因が考えられると思いますが、順番に答えていきます。

前提:Webサーバ側には、MIMEの設定が必要ですが、.NET Frameworkのインストールは不要です。
※一方クライアント側に、.NET Frameworkがインストールされているかされていないかを判定するのは実は(VS 2005が生成するHTMLコードの)JavaScriptです。ブラウザのUserAgent情報に「.NET CLR 2.0.XXXXX」という文字が含まれているかどうかで判定しています。クライアントに.NET Frameworkがインストールされている場合は、XXXXXX.applicationを実行する必要があるし、そうでない場合はsetup.exeを実行する必要があります。この仕組みは実際の運用では重要なので理解しておく必要があると思います。

【対処方法】

1. いったんIEのキャッシュを消して行ってみてください。前回実行時のキャッシュにより正常に動作しない場合があります。

2. MIMEは正常に設定されているでしょうか? これを確認するにはHTTPヘッダを参照してみてください。「application/x-ms-application」としてコンテンツが取得できているかを見ます。以下のツールなどが使えます。
http://www.forest.impress.co.jp/article/2005/02/17/iehttp.html

まずはこの2つを検証してみていただけますでしょうか?
とある根性なし
ベテラン
会議室デビュー日: 2006/08/15
投稿数: 54
投稿日時: 2006-08-18 16:17
お世話になっております。
遅くなって大変申し訳ありません。
経過報告にあがりました。

結論から言うと、ClickOnce によるインストールはうまくいきました。
しかしわからないことが山積しています。。。

今日実行した作業を説明します。
前回サーバー終了時には、IISに追加設定したものはすべて削除してありました。(.application 等)
今回サーバー立ち上げすぐに、IISのルート項目のMIMEに .application application/x-ms-application の追加を行い、inetmgr の“IISの再起動”を実行しました。
実行端末は、VS2005開発端末と Framework なしの端末がありますので、開発端末では IE キャッシュを全消去(System_Deployment_Log も消去)し、もう一方は何も変えませんでした。

そして ClickOnce の再発行を行い、IISのディレクトリに手動で配置。

開発端末からインストール用 Web ページにアクセスし、“インストール”クリックすると、
[実行/名前を付けて保存] ダイアログが表示されたので“開く”を実行。
その後セキュリティ警告画面でインストールを確認、インストール成功。

もう一方の端末では、[実行/名前を付けて保存] ダイアログとセキュリティ警告画面の間で
Framework のインストールがありますが、無事にインストールできました。


ここで問題点と疑問点です。
このあと、MIMEから .application の設定を削除し、IISの再起動後にインストール作業をしてみたのですが、なぜかうまくいってしまいました。さらにサーバーの再起動をした後にも行ってみたのですが、正常にインストールできてしまいました。
これはなぜなのでしょう。
今回MIMEの設定をする前に、もう一度インストール作業を行ってみて、どのように動作するか検証すべきでした orz

IEのキャッシュは残っていても、いなくても関係ないようです。

次に、インストール Web ページについてです。
この参照先を見ると、必須コンポーネントがインストール済みの場合は表示されないとのことですが、私の環境では表示されているんですよ。なにか設定かインストールが必要でしょうか?

三つ目に、[実行/名前を付けて保存] ダイアログが表示されることについてなのですが、
MSDNで問題点にあげられていることからして、表示されるのはおかしいですよね?
[保存]を選ぶと Setup.exe がダウンロードされてきますが、これを実行してもインストールは失敗してしまうので、明らかにムダな手順ですよね。
表示されないようにするにはどうしたらよいでしょうか。

最後に、ieHTTPHeaders 試してみたのですが、「.NET CLR 2.0.XXXXX」は確認できましたが、「application/x-ms-application」は確認できませんでした。
コンテンツとして取得できていないのに、うまくいっている?????
ではなぜ前回うまくいかなかったんでしょう。。。

申し訳ありませんが、もうすこしお付き合いいただけませんでしょうか。
よろしくお願いいたします。

[ メッセージ編集済み 編集者: とある根性なし 編集日時 2006-08-18 16:46 ]
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2006-08-18 18:06
[実行/名前を付けて保存]ダイアログが表示されるというのは、「Content-Type: application/octet-stream」でコンテンツが取得されているのではないでしょうか?
クライアント側で(ieHTTPHeaders などを使って)実際のContent-Typeを見た場合、そこの値は何になっているでしょうか?
もしContent-Type自体が取得できていない場合は正しく「application/x-ms-application」が設定できていないのではないかと思います。


(1).NET Frameworkがインストールされている環境:

 この環境の場合「AppName.application」を実行しますが、
先ほど書いたように「.application」という拡張子に対するMIMEが
依然として「application/octet-stream」となっているのではないでしょうか?
ここで「application/x-ms-application」で取得する必要があるのですが……。


(2).NET Frameworkがインストールされていない環境:

 この環境では「setup.exe」を実行する必要がありますが、この「.exe」という拡張子には「application/octet-stream」のMIMEが割り当てられています。
.exeファイルはセキュリティ上の問題があるのでユーザーに実行するかどうかを尋ねるダイアログが出るのを抑制するのは恐らく不可能だと思います。

 ちなみにClickOnceの設定内容によっても変わるのかもしれませんが保存したsetup.exeを実行してもインストール・実行はうまくいくはずです。
例えば以下のファイルを保存して実行してみてうまくいかないでしょうか?
http://www.atmarkit.co.jp/fdotnet/vblab/demo/DotNetFx20/setup.exe



★IEでのMIMEタイプの判定は、次のような流れということになっています(どこでひっかかって[実行/名前を付けて保存]ダイアログが表示されているのかはちょっと分かりませんが……)。


1. Webサーバ側からのMIMEタイプの通知を取得

 ↓ <必ず次の判定を行う>


2. 同じURL元からの既存のダウンロード・コンテンツを探して同じものがあればそのMIMEタイプを採用して確定
 ※注意:ここでの確定は、先ほどの1のMIMEタイプの通知を上書きしてしまいます。
  →このためIEのキャッシュの削除が必要になります。

 ↓ <MIMEタイプが確定していなければ以降の判定を行う>


3. Webサーバ側から通知されたMIMEタイプが既知のもの(具体的な内容は以降で提示しています)で実際にそのデータであることが間違いないと確認されれば、そのMIMEタイプに決定

 ↓ <それでもMIMEタイプが確定しなければ以降の判定を行う>


4. ファイルの拡張子に基づいてクライアント環境のレジストリの登録内容と比較してMIMEタイプを決定
 ※.NET Framework 2.0がインストールされている環境であれば以下のレジストリがチェックされると思います。
 [HKEY_CLASSES_ROOT\\.application] Content Type = application/x-ms-application

 ↓ <ここまでにMIMEタイプが決定しなければ>


5. ファイルの拡張子に関連付けられているアプリケーションを調べ、そのアプリケーションが存在する場合、MIMEタイプを自動的に「application/octet-stream」に決定

 ↓ <それでもMIMEタイプが決定しなければ>


6. テキスト データなら「text/plain」にMIMEタイプを決定、バイナリ データなら「application/octet-stream」に決定


※MIMEタイプが「application/octet-stream」と決定されると、[実行/名前を付けて保存]ダイアログが表示されます。


【既知のMIMEタイプ】
text/richtext
text/html
audio/x-aiff
audio/basic
audio/wav
image/gif
image/jpeg
image/pjpeg
image/tiff
image/x-png
image/x-xbitmap
image/bmp
image/x-jg
image/x-emf
image/x-wmf
video/avi
video/mpeg
application/postscript
application/base64
application/macbinhex40
application/pdf
application/x-compressed
application/x-zip-compressed
application/x-gzip-compressed
application/java
application/x-msdownload


> 次に、インストール Web ページについてです。
> この参照先を見ると、必須コンポーネントがインストール済みの場合は表示されないとのことですが、私の環境では表示されているんですよ。なにか設定かインストールが必要でしょうか?

JavaScriptは有効になっているでしょうか?
ちなみに実は私の環境でも表示されますが、これはUserAgentに「.NET CLR 2.0.XXXXX」という文字が入っていないみたいで、どうも.NET Framework 2.0のインストールで何か問題があったみたいです(^^


以上の内容で何か解決・理解の糸口になるものはあるでしょうか?
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2006-08-18 19:51
> このあと、MIMEから .application の設定を削除し、IISの再起動後にインストール作業をしてみたのですが、なぜかうまくいってしまいました。さらにサーバーの> 再起動をした後にも行ってみたのですが、正常にインストールできてしまいました。
> これはなぜなのでしょう。

いろいろと書きましたがIEのMIME判定も複雑なため、どこが原因で正しく動作したりしなかったりするのかはちょっと分かりにくいですね。一度実行したこによりクライアント側のMIME設定データが変化したのかもしれません。

しかし、サーバ側に正しいMIME設定、クライアント側に正しい.NET Frameworkのインストール(=クライアント側のMIME登録)が両方そろっていれば、間違いなく1回目からうまく行くはずです。

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