- PR -

IEでのWindowsフォームコントロールのホスト

投稿者投稿内容
あらー
会議室デビュー日: 2002/12/11
投稿数: 12
投稿日時: 2003-02-08 14:51
現在サーバー上で稼動しているデータベース(SQL Server)のテーブルの一部を
クライアントマシンのデータベース(MSDE)にコピーするWindowsアプリケーション
(VB.NET)を作成しています。
セットアッププログラムを作成して、Webページに配置し、各クライアントに
そのページからインストールを行ってもらって、そのプログラムは正常に
動いています。

ところが、そのアプリケーションの仕様が度々変更になるため、
その都度、クライアントのアプリケーションをアンインストールしてもらい
再度セットアップするという手間をかけています。

そこで、当該プログラムをWindwosフォームコントロールとして作成し、
WebページにOBJECTタグを使って配置することを考えました。
<OBJECT ID="RepMgr1" CLASSID="RepMgrCtl.dll#RepMgrCtl.RepMain" HEIGHT="300" WIDTH="300"></OBJECT>
IEで表示するとコントロールは正常に表示されますが、
ローカルマシンのファイルにアクセスしようとすると例外が発生
してしまいます。

おそらくセキュリティの問題でファイルシステムのアクセスは
デフォルトで無効になっているようなのですが、これを回避
する方法はあるのでしょうか?

ご存知の方がいらっしゃいましたら、ご教示頂ければ幸いです。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-02-08 15:14
あらーさんが目にした.NET Frameworkの機能を「コードアクセスセキュリティ」といいます。私がこちらで連載させていただいている解説 インサイド.NET Framework第9回から第13回まででコードアクセスセキュリティについて解説しておりますので、ぜひご一読ください。
あらー
会議室デビュー日: 2002/12/11
投稿数: 12
投稿日時: 2003-02-08 18:01
NothingBut.NETFXさん、有難うございます。

リンクのコードアクセスセキュリティを読まさせて頂きました。
「.Net Framework Configuration」の「ランタイム
セキュリティポリシー」の「コンピュータ(Machine)」の
コードグループ「Policy_Intranet_Name」のアクセス許可
セットをFullTrustにしたところ、ローカルのファイルシステム
にアクセスするWindowsフォームコントロールを正常にIE上
で実行することができました。

感謝です!
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-02-08 18:30
あ。。

個別の問題が解決されたことは喜ばしいと思いますが、それが意味することもしっかり把握してくださいね。あらーさんのマシンには、いまやあらーさんの「イントラネット」に含まれているあらゆるマネージコードが襲いかかろうとしている状態にあるのですから。。。
あらー
会議室デビュー日: 2002/12/11
投稿数: 12
投稿日時: 2003-02-08 18:51
確かにイントラネット上でWindowsフォームコントロールを含むWebページを
表示しさ際になんの警告もなくソフトウェアが実行できてしまうのは
問題だと認識しております。
本当は、Webページを表示したときにActiveXコントロールと同様に
ダイアログが出現してダウンロードするかどうか尋ねられれば理想なのですが、
どうも私の知識では解決できません。
とりあえず、FullTrustではなくて、必要最小限のアクセス許可セットを与えて
運用してみようと思います。
あらー
会議室デビュー日: 2002/12/11
投稿数: 12
投稿日時: 2003-02-14 04:35
より安全にイントラネット上でWindowsフォームコントロールを含むWebページ
を提供するために、コントロールのDLLに厳密な名前を与えて、かつ
.NET Framework Configurationにて、当該厳密な名前のアセンブリに対しては
FullTrustのアクセス許可を与えることを考えております。

snコマンドにてキーを作成し、そのキーでDLLに厳密な名前を与え、
かつ.NET Framework Configurationにより、イントラネットの
グループの子グループとしてメンバシップ条件が厳密な名前である
コードグループを作成しました。
ポリシーキーにはsnコマンドで作成した公開キートークンである
321b3d8b67f89139
を設定したのですが、この操作を行っても、Webページを開くと
当該コントロールが実行されることはありませんでした。

いろいろ調べてはみたのですが何が問題かわからない状態です。
対処法をご存知の方がいらっしゃいましたら、助言頂けると助かります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-14 11:33
 私が今携わっているシステムと同じですね。下のプロファイルから過去発言を参照して頂くと、いろいろ出てきます。

 で、私のところでは「特定のサイト」に対して権限を緩く設定しています。Webサービス、Webアプリ、.NETアセンブリがそれぞれ複数あり、厳密名を付けるとHTMLから呼び出せなくなったり(解決策はあります)、ビルドするごとに厳密名を付け直さなければならなかったり(解決策はあります)、厳密名には「バージョン番号(ビルド番号含む)」が含まれているため、厳密名でセキュリティーポリシーを設定するとビルドするごとにセキュリティー設定も配布しなければならなかったり(という認識であっていると思っているのだが?)、etc...
あらー
会議室デビュー日: 2002/12/11
投稿数: 12
投稿日時: 2003-02-14 11:35
自己レスです。

メンバシップ条件が厳密な名前のコードグループ作成の際に必要な
キーは公開鍵全体のようでした。

イントラネットのグループの下にメンバシップ条件が厳密な名前で
アクセス許可セットがFullTrustの子グループを作成し、厳密な名前
を与えたexeファイルをを共有フォルダ(イントラネット)上から実行
したところ、FullTrustで実行されました。

しかし、厳密な名前を与えた自作のWindowsフォームコントロール
をWebページに貼り付けて、当該Webページを開くと、
コントロールが実行すらされません。

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