- PR -

ユーザーコントロール(DLL)の破棄について

投稿者投稿内容
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-12-18 11:40
こんにちは。
開発環境VB.NET DB=Firebird OS=Vistaです。

入力・検証を行うユーザーコントロールを作成しました。
このDLLを開発者以外の者が使用してフォームが作成できないように
するために悩んでいます。
環境としてはサーバー側にExe・DLLなどをおき
ClientPCからはそれを参照して実行します。
またサーバー側にサーバーの名前・パスとClientの名前とパスを
記述したXMLファイルと、キー情報を記述したXMLファイルを置きました。

ユーザーコントロールの作成時に、サーバーのXMLファイルを
読み込み、パス名を取得して、キー情報を記述したXMLファイルを読み込みます。
読み込みに失敗した場合、ユーザーコントロールをDestroyHandleして
います。その場合、フォーム上にはグレーのユーザーコントロールが
表示され、使用できないようになってはいますが、
これを親フォームを破棄することは可能でしょうか?

また、New → 検証メソッド → MyBase.DestroyHandle() としていますが、
Disposeすることができません。
それとも、デザイナでユーザーコントロールをDropしたときに、
サーバー認証の検証を行い、認証失敗時は作成不可にすることは可能でしょうか?
(こちらの方が分かりやすいですが・・)
適切なイベントや検証方法が見つからずに悩んでいます。

アセンブリの厳密名設定やロールベースアクセスなどの記事も
読みましたが、開発段階で簡易な方法を探しています。

何かいい方法がありましたら、よろしくお願いします。
コード:
 Public Sub New()
        InitializeComponent()
        UserControl_Init()
 End Sub
  Private Sub UserControl_Init()
        Dim FIleName As String = "" 'FilePassProvider + FileNameProvider
        FIleName = "\\192.168.2.000\Secret" 
        'ファイルのパスの確認
        If System.IO.Directory.Exists(FIleName) = False Then
            Console.WriteLine("フォルダ存在しません")
            GoTo error12
        End If
        'ファイル確認
        Dim bbname = "\LLL.Xml"
        If System.IO.File.Exists(FIleName + bbname) = False Then
            Console.WriteLine("ファイル存在しません")
            GoTo error12
        End If
	’Keyファイル認証
        If gfOpen_XML_key(FIleName + bbname, "ABC") <> 0 Then
            Console.WriteLine("認証失敗")
            GoTo error12
        End If
true12:
        Exit Sub
error12:
        Console.WriteLine("読込失敗のため終了")
        MyBase.Enabled = False
        'MyBase.Dispose(True) ← できない・・
        MyBase.DestroyHandle()
        MessageBox.Show("コントロール読込失敗につき、Handle破棄します")
       
    End Sub
    Private Function gfOpen_XML_key(ByVal mFilePassDBName As String, ByVal lpDbName As 

String) As Integer
        Dim doc As XmlDocument = New XmlDocument()
        Try
            doc.Load(mFilePassDBName)
        Catch ex As XmlException
            MessageBox.Show("XMLエラー" + ex.Message)
            Return Err.Number
        End Try
        Dim Constr As String = ""
        Try
            Dim writerNode1 As XmlNode = doc.SelectSingleNode("//SUB[@id='" & lpDbName & 

"']")
            Dim writerNameNode As XmlNode = writerNode1.SelectSingleNode("User") ', nsmgr1)
            Constr = ""
            Constr = Constr & writerNameNode.InnerText
            If Constr = "ABC" Then
                Return 0
            Else
                MessageBox.Show("認証失敗")
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, ex.ToString, MessageBoxButtons.OK)
            Return Err.Number
        End Try
    End Function


一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-18 12:24
引用:

りんごさんの書き込み (2007-12-18 11:40) より:
開発段階で簡易な方法を探しています。


引用:

りんごさんの書き込み (2007-12-18 11:40) より:
開発者以外の者が使用してフォームが作成できないように


開発段階なのに「開発者以外に」というのはどういうことでしょうか。
公開しなければそれで済むのでは?
例えばサーバーのexeが置いてある場所を、開発者以外はアクセスできないようにするとか。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-12-18 12:38
ご返答ありがとうございます。

引用:
開発段階なのに「開発者以外に」というのはどういうことでしょうか。



例えば、社員以外の者がPCを盗んだとして、
.Net FramworkでそのDLLを使用して、新たにアプリ作成など
されては困るので・・ロックをかけたいという概念です。

引用:
サーバーのexeが置いてある場所を、開発者以外はアクセスできないようにするとか。



その方法を詳しく聞きたいです。
Exeが置いてある場所をアクセスできない とはフォルダに
何か属性でも設定するのでしょうか??

現段階では開発に入ったばかりなのですが、
いずれ納品して、ユーザーがClientPCで作業をします。
そこに同業他社がやってきたとして(仮定ですが)
例えばそのPCを盗まれて、アプリを改ざんして
別のアプリを作成・・などでDLLを使われたくないのです。

何かいいお知恵があればご教授よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-12-18 13:19
コントロールにライセンス機能をもたせたほうがいいのではないでしょうか?

Japan.internet.com コラム/CodeGuru
http://japan.internet.com/column/developer/20051011/29.html

あと、難読化もしたほうがいいと思います。
そもそも、PCなどを盗まれない事にお金をかけたほうがいいとは思いますけど。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-18 13:44
引用:

りんごさんの書き込み (2007-12-18 12:38) より:
例えば、社員以外の者がPCを盗んだとして、


あー、なるほど。そういうことですか。
それならburton999さんの提示されたライセンス機能ってのはいいかもしれませんね。

引用:

りんごさんの書き込み (2007-12-18 12:38) より:
Exeが置いてある場所をアクセスできない とはフォルダに
何か属性でも設定するのでしょうか??


そのサーバー上のexeのある場所はファイル共有でアクセスしているわけではないんですか?
単純にWindowsのアクセス制限の機能のことを言ったつもりでしたが。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-12-18 14:01
引用:
コントロールにライセンス機能をもたせたほうがいいのではないでしょうか?



ありがとうございます。
早速コラムを読んでみます。

引用:
そのサーバー上のexeのある場所はファイル共有でアクセスしているわけではないんですか?
単純にWindowsのアクセス制限の機能のことを言ったつもりでしたが。



お返事ありがとうございます。
ファイル共有でアクセスしています。
今の段階では
「ランタイムセキュリティポリシー」で
「ユーザー(User)」内
「All_Code」の「Internet_Zone」で「子コードグループを追加」
名前を入力「Test」など
「アクセス許可セット」を「FullTrust」を選択

と設定してアクセスしています。
この.Net Framework 2.0構成で、1つのDLL(もしくはExe)に関して
使用不可(というか書込み不可?)の設定が可能なんでしょうか?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-18 16:13
引用:

りんごさんの書き込み (2007-12-18 14:01) より:
ファイル共有でアクセスしています。
今の段階では
「ランタイムセキュリティポリシー」で・・・



.NET Frameworkのコードアクセスセキュリティではなくて、Windowsの共有フォルダへのアクセス制限です。制限というか、正しくは「アクセス許可」ですね。
Everyoneとかあるアレです。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-12-18 16:50
引用:
.NET Frameworkのコードアクセスセキュリティではなくて、Windowsの共有フォルダへのアクセス制限です。制限というか、正しくは「アクセス許可」ですね。
Everyoneとかあるアレです。



今確認すると「Everyone」でフルコントロールにチェックがついています。
これをEveryoneをやめて、各ユーザーごとに追加?するのでしょうか?
これをGuestとして追加するのでしょうか?追加したユーザーに対してのみ
読み取り許可?ということでしょうか・・
Vistaに慣れていないので、初心者的な質問ばかりですみません。
Vista側をサーバーとして、他ClientはXPでのテストを行っています。
逆もテストしようとは思っていますが。

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