- PR -

ノータッチ・デプロイメントでSecurityExceptionの例外をcatchするには

1
投稿者投稿内容
けに〜
会議室デビュー日: 2002/09/25
投稿数: 9
投稿日時: 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をキャッチできるでしょうか?
または、信頼レベルが「完全な信頼」であるかを判断する方法はありますで
しょうか?

よろしくおねがいします。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2005-06-21 12:56


[ メッセージ編集済み 編集者: かめたろ 編集日時 2005-06-21 13:11 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2005-06-21 13:53
おかしいですね。
発生しているのは SecurityException ではないってことはないですよね?
私はCatchで型にフィルタをかけられることを忘れてたので、
こんなかんじでやってました。VBですけど。
コード:

Catch ex As Exception
If ex.GetType Is GetType(Security.SecurityException) Then
'セキュリティエラーのばあい

Else
'その他のばあい
Throw ex
End If



引用:

必要に応じて「.NET ウィザード」の「.NETセキュリティの変更」で
イントラネットの信頼レベルを「完全な信頼」に変更して対応する予定


エンドユーザーが指示したとおりにやってくれればいいんですが・・・。
画像つきで示してもわかってくれなかったりするので、ボタン一発で設定できるようにしたほうがいいかもしれません。
例えば、うちの事例ですが
caspol.exe を実行するHTMLアプリケーション?(拡張子がhtaのヤツ)を作っておいて、
ユーザーは、セキュリティエラーが出たらそれをダウンロードしてボタンを押す。みたいなかんじで・・・


[ メッセージ編集済み 編集者: かめたろ 編集日時 2005-06-21 13:54 ]
けに〜
会議室デビュー日: 2002/09/25
投稿数: 9
投稿日時: 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にしておこうかと思います。

ありがとうございました。
けに〜
会議室デビュー日: 2002/09/25
投稿数: 9
投稿日時: 2005-06-21 17:37
お礼を忘れてました。

かめたろさん、ありがとうございました。
caspol.exe を実行するHTMLアプリケーションというのは
知りませんでした。
勉強してみます。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 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

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