none
【Visual Studio 2005】 LAN上のハードディスクで実行できない。 RRS feed

  • 質問

  •  

    Visual Studio 2005で社内用システムアプリケーションを制作しておりますが、エラーが出てしまい、解決方法を探しております。

    開発環境:Visual Studio 2005 Professional Edition

    DB:Microsoft Access

     

    Release版を制作し、デスクトップ上にDBファイルやexeを置いて実行すると正常に動作しますが、

    LAN上にあるハードディスクにexeやDBファイルを移し、実行するとエラーが出てしまいます。

     

    ①システム起動時(ログインフォーム表示時)のエラー

    発行元:不明な発行元

    となり、

    .NETセキュリティ警告

    が出ます。

     

    ②DBアクセス時のエラー

    ログイン処理をする際、DB接続を行おうとすると、下記のようなエラーが起きて実行できません。

    -----------エラー内容---------------------------

    セキュリティポリシーで許可されていない操作をアプリケーションが実行しようとしました。必要なアクセス許可をこのアプリケーションに与えるには、システム管理者に連絡するか、Microsoft Framework 構成ツールを使用して下さい。

    System.Security.Permissions.FileIOPermission, mscorlib

    ・・・・・(中略)・・・・・・

    のアクセス要求に失敗しました。

    -----------------------------------------------------

     

    初心者なのでとんちんかんな質問をしておりましたら申し訳ありませんが、

    ①の解決方法として、「デジタル署名を手に入れる」方法で解決するのでしょうか?これはお金がかかってしまうのですが、もっといい方法はないでしょうか。

     

    ②これを解決する方法を探してみましたが、見つかりませんでした。

    Microsoft Framework 構成ツールの使用する方法をどなたかご存じでしたら教えて下さい。

     

    よろしくお願いいたします。

    2008年8月27日 9:59

回答

  •  エリにゃん さんからの引用

    >そうであれば、「無視する」が一番コストの低い運用かと思います。

    そうします!ありがとうございます。【解決】

    類似のスレッドが別の掲示板でありました。

     

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=24200

     

    先日はあのように回答してしまいましたが、「無視する」という選択肢は慣れによって、他の不正なプログラムもそのまま実行してしまうリスクを抱えるという指摘がありました。(上記スレッドにて)

    このため、上記のスレッドにあるような、何らかの署名を入れることを勧めます。

    2008年8月30日 12:15
    モデレータ

すべての返信

  •  エリにゃん さんからの引用

    ①の解決方法として、「デジタル署名を手に入れる」方法で解決するのでしょうか?これはお金がかかってしまうのですが、もっといい方法はないでしょうか。

    「いい方法」とは誰にとって良い方法なのですか?

    一般ユーザに対して良い方法は、そのコードのが改ざんされていないこと、偽造されていないことを保証するデジタル署名をつけることだと思うのですが。

     

    http://www.verisign.co.jp/codesign/objectsigning/index.html

     

     エリにゃん さんからの引用

    ②これを解決する方法を探してみましたが、見つかりませんでした。

    Microsoft Framework 構成ツールの使用する方法をどなたかご存じでしたら教えて下さい。

    分かりやすいかは別として、MSDNのページを貼っておきます。

    http://msdn.microsoft.com/ja-jp/library/2bc0cxhc(VS.80).aspx

    http://msdn.microsoft.com/ja-jp/library/ezf53bba(VS.80).aspx

    http://www.microsoft.com/japan/msdn/net/general/faq111700.aspx#faq111700_security02

     

    .NET 3.5 SP1で緩和されているという話もありますが、ソリューションとしては不適切かな。。。

     

     

    ところで、そのDBファイルは他のPC、他のユーザと共有して使うものですか?

    ローカルにインストールみたいな形になって良いなら、ClickOnce等で配布するのもありだとは思いますが。

    2008年8月27日 14:12
    モデレータ
  •  

    Azuleanさま

    回答いただき、ありがとうございます。

    MSDNのページのリンクありがとうございます。解読に1~2日かかりそうですが、早速試してみます。

     

    >「いい方法」とは誰にとって良い方法なのですか?

    >一般ユーザに対して良い方法は、そのコードのが改ざんされていないこと、偽造されていないことを保証するデジタル署名をつけ

    >ることだと思うのですが。

     

    おっしゃるとおり、一般ユーザーに配布するものでしたら、デジタル署名を付ける方法でと思っていますが、

    今回は、社内で制作して、社内で使用する小規模なシステムのため、出来るだけコストを抑えたいという狙いがあるのです。

     

    >ところで、そのDBファイルは他のPC、他のユーザと共有して使うものですか?

    >ローカルにインストールみたいな形になって良いなら、ClickOnce等で配布するのもありだとは思いますが。

     

    LANに接続しているパソコン数台のどこからでもアクセス出来るようにしたいという要望で、

    ただ、複数PCからの同時アクセスはないという設定で制作しています。(ちなみにLAN接続されているマシンはVistaとXPです。)

    また、社内で使用している外付けハードディスクは、自動ミラーリング機能がついていて、データがおかしくなっても

    元に戻せるという理由で、データの格納場所が指定されています。

    おっしゃられている「ローカルにインストール」というのは、一台のPC内にDBとアプリケーションを置く方法でしょうか?

    ClickOnceで配布してLANのハードディスクにのせることはできますか?

    2008年8月27日 17:53
  •  エリにゃん さんからの引用

    今回は、社内で制作して、社内で使用する小規模なシステムのため、出来るだけコストを抑えたいという狙いがあるのです。

    そうであれば、「無視する」が一番コストの低い運用かと思います。

     

     エリにゃん さんからの引用

    おっしゃられている「ローカルにインストール」というのは、一台のPC内にDBとアプリケーションを置く方法でしょうか?

    ClickOnceで配布してLANのハードディスクにのせることはできますか?

    ClickOnceのインストール先はローカルのハードディスクです。LANのハードディスクにインストールするわけではありません。(インストール先は基本的に指定できません)

    インストーラをLANのハードディスクに置くイメージ近いと思います。

    ClickOnceとはいえ、インストールが嫌だと言うのであれば、この手法は無理でしょう。

     

    絶対にLANのハードディスクにexeを置きたいのであれば、実行する全てのPCでアクセス許可を設定するか、その制限が緩和された.NET Framework 3.5 SP1を適用するかといった手法しかないように思えます。

     

     

    ところで、そのアプリはDBを更新して、かつ別のPCから更新されたDBを参照するのでしょうか?

    2008年8月27日 22:04
    モデレータ
  • 本筋からは外れますが…
     エリにゃん さんからの引用

    また、社内で使用している外付けハードディスクは、自動ミラーリング機能がついていて、データがおかしくなっても

    元に戻せるという理由で、データの格納場所が指定されています。

    ミラーリングというのは、 正・副ディスクの内容が常に同じになるようにすることです。 つまり、 データがおかしくなったときは、 正・副ともにおかしくなっていて、 元の正常なデータはどこにも残っていませんよ。


    「データがおかしくなっても元に戻せる」 ためには、 データのバックアップ (計画、実施、検証) が必要です。

    2008年8月28日 4:31
  •  

    biac

    ご回答ありがとうございます。

     

    >正・副ともにおかしくなっていて、 元の正常なデータはどこにも残っていませんよ。

     

    おかしいデータをミラーリングしても意味がないですね。。ミラーリング機能はハードディスク破損の時用のためにあるんでしょうか。。。(物理破損までミラーリングしなければですが)

    データの自動バックアップの設定を試みてみます。ご指摘ありがとうございました。

    2008年8月28日 15:29
  •  

    Azulean

     

    ご回答ありがとうございます。

     

    >そうであれば、「無視する」が一番コストの低い運用かと思います。

     

    そうします!ありがとうございます。【解決】

     

     

    パソコンの調子が悪いのでしょうか、記述いただいたリンクのMSDNサイトは見れたり見れなかったりで、

    検証にはもうしばらくかかりそうです。

     

     

    >そのアプリはDBを更新して、かつ別のPCから更新されたDBを参照するのでしょうか?

     

    そうなります。別PCから同一のDBを更新・参照する形です。

    また、今後、そのDBのデータを利用する別アプリケーションも制作し、同時に利用する予定です。

    2008年8月28日 15:42
  • 二台で行うミラーリング機能の場合、ディスクの片方が物理的に破損した場合でももう片方のディスクのみで運用を続けます。したがって、ディスクが壊れていない場合、プログラムから見て異常なデータでもディスクにしてみれば、正常なデータです。

    したがって、双方のディスクには同じ内容が書き込まれます。

    2008年8月30日 2:10
  •  エリにゃん さんからの引用

    >そうであれば、「無視する」が一番コストの低い運用かと思います。

    そうします!ありがとうございます。【解決】

    類似のスレッドが別の掲示板でありました。

     

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=24200

     

    先日はあのように回答してしまいましたが、「無視する」という選択肢は慣れによって、他の不正なプログラムもそのまま実行してしまうリスクを抱えるという指摘がありました。(上記スレッドにて)

    このため、上記のスレッドにあるような、何らかの署名を入れることを勧めます。

    2008年8月30日 12:15
    モデレータ
  •  

    KKamegawa

    書き込みありがとうございます。どうやらそのようですね。

    現在、無料配布の自動バックアップツールでログが保存可能か検証中です。ありがとうございました。

    2008年9月1日 4:29
  • Azulean

    たびたび書き込み下さり、ありがとうございます。

     

    教えていただきましたスレッドを見ていて(以前Azulean様にも教えていただきましたことですが)、ふと気づいたのですが、

    証明書をインストールしても証明書に対して実行するマシンでポリシー設定を必要とするならば、

    ネットワーク上にexeを置く意味がないような気がしてきました。「ネットワーク上にexeを置く」=「接続されているどのマシンからもアクセスできる」という目的なのに、各マシンに設定が必要ならば、そのままexeを各マシンのローカルに置いた方が早いと思ったので。

     

    紅の豚118 さんが提示されていた方法は、私には難しすぎたので、

    DBのみをネットワーク上に置いて、ローカルにexeを置く方法に変えてみたら、①②の問題共、解決しました。

     

    直接問題を解決したのでは、なくなってしまいましたが、

    Azulean様、ありがとうございました。解決いたしました。

     

    また、Azulean様、回答いただきました皆様、いろいろ勉強させていただき、ありがとうございました。

    この場を借りましてお礼申し上げます。

    2008年9月1日 5:11