- - PR -
ノータッチ・デプロイメントでSecurityExceptionの例外をcatchするには
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-21 12:09
こんにちは
ノータッチ・デプロイメントで配布するアプリケーションの作成を行っています。 このアプリケーションでは、ある局面でイントラ内にある WEBページを表示する 必要がありProcess.Start(intrUrl)にてデフォルトブラウザを起動しています。 当然、「...セキュリティポリシーで許可されていない...」のダイアログが表示 されるので必要に応じて「.NET ウィザード」の「.NETセキュリティの変更」で イントラネットの信頼レベルを「完全な信頼」に変更して対応する予定です。 もし、イントラネットの信頼レベルを「完全な信頼」に変更していないユーザー が起動した場合には、「要求が失敗しました」という意味不明なダイアログでは なく、対処方法を示唆するダイアログを表示したいため、以下のようなコードで SecurityExceptionのキャッチしようと試みましたが例外をキャッチできません。 try { Process.Start(intraUrl); } catch( SecurityException ex) { MessageBox.Show("foo!"); } catch { MessageBox.Show("bar!"); } どのようにすれば、SecurityExceptionをキャッチできるでしょうか? または、信頼レベルが「完全な信頼」であるかを判断する方法はありますで しょうか? よろしくおねがいします。 | ||||||||
|
投稿日時: 2005-06-21 12:56
[ メッセージ編集済み 編集者: かめたろ 編集日時 2005-06-21 13:11 ] | ||||||||
|
投稿日時: 2005-06-21 13:53
おかしいですね。
発生しているのは SecurityException ではないってことはないですよね? 私はCatchで型にフィルタをかけられることを忘れてたので、 こんなかんじでやってました。VBですけど。
エンドユーザーが指示したとおりにやってくれればいいんですが・・・。 画像つきで示してもわかってくれなかったりするので、ボタン一発で設定できるようにしたほうがいいかもしれません。 例えば、うちの事例ですが caspol.exe を実行するHTMLアプリケーション?(拡張子がhtaのヤツ)を作っておいて、 ユーザーは、セキュリティエラーが出たらそれをダウンロードしてボタンを押す。みたいなかんじで・・・ [ メッセージ編集済み 編集者: かめたろ 編集日時 2005-06-21 13:54 ] | ||||||||
|
投稿日時: 2005-06-21 16:36
解決しました。
Process.Startの実行部分を別の関数に別けてやると例外をキャッチできました。 理屈はわからないけど、SecurityExceptionの例外は、Process.Startを実行する タイミングではなくProcess.Startを含む関数に制御が移った瞬間に発生している ような感じです。 どなたかフォローください。 private void wbOpen(string h) { Process.Start(h); } private void openwebpage_Click(object sender, System.EventArgs e) { try { //Process.Start(intraUrl); wbOpen(intraUrl); } catch( SecurityException Ex ) { MessageBox.Show(Ex.Message); } } あと、参考までに SecurityPermission sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); sp.Demand(); で例外を発生させてアンマネージコードを実行できるかを事前に確認する方法も ありました。(これで正しいのかどうか良くわかりませんが) 事前に確認して、ボタンのEnabeldプロパティをfalseにしておこうかと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2005-06-21 17:37
お礼を忘れてました。
かめたろさん、ありがとうございました。 caspol.exe を実行するHTMLアプリケーションというのは 知りませんでした。 勉強してみます。 | ||||||||
|
投稿日時: 2005-06-21 18:27
このコマンドをエンドユーザーにうってもらいたかっただけなんですけどね。
%windir%\Microsoft.NET\Framework\v1.1.4322\caspol -machine -q -chggroup Trusted_Zone -zone Trusted FullTrust コマンドうつだけなのでお手軽なbatとかvbsとかでもいいんですが、その時は試しにhtaにしてみました。 Trusted_ZoneをFullTrustにしちゃってほんとにセキュリティ的にだいじょうぶなの?って言われるとアレなんですが、そういう場合は新しいコードグループを追加してメンバシップ条件をサイトとかURLにするといいと思います。 |
1