- - PR -
ASP.NET で他のPCの共有ファイルにアクセスしたい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-09-28 15:02
はじめまして。
ひでたつ と申します。 イントラネットで ASP.NET が稼働しているPCから、他のPCの共有ファイルを読み込みたいのですが、ファイルをオープンしようとすると下記のような例外が発生します。 "パス "\\コンピュータ名\temp\foo.txt" へのアクセスが拒否されました。" ちなみに、共有フォルダをネットワークドライブとして割り当ててから実行すると、 "パス "Z:\foo.txt" の一部が見つかりませんでした。" となります。 エクスプローラからは共有ファイルへのアクセスはできています。 共有ファイルがあるPCの[インターネットのプロパティ]で、ASP.NET 側のサイトを信頼済みサイトにしてみたりと色々と設定してみましたが解決できずに困っています。 machine.config の <processModel> で userName="SYSTEM" としています。 解決策をご存じの方がいらっしゃいましたら、よろしくお願いします。m(_ _)m 使用環境: Windows XP SP1 .NET Framework v1.0.3705 C# | ||||||||
|
投稿日時: 2002-09-30 08:36
はじめまして。
<追記> >>machine.config の <processModel> で userName="SYSTEM" としています。 ログインしているユーザと、接続しようとしているユーザが違うからではないでしょうか。 </追記> WNetAddConnection2(Plattform SDK)を、ユーザ"SYSTEM"で呼び出してみてください。私の方では、これでいけてます。 Windows2000Svr.→Solaris2.5.1+Samba [ メッセージ編集済み 編集者: Jitta 編集日時 2002-09-30 08:38 ] | ||||||||
|
投稿日時: 2002-09-30 11:39
Jitta 様
こんにちは。
この一言がヒントになりました。 今まで UserName には "machine" か "SYSTEM" しか記述できないと思い込んでいました。 ここにログインしているユーザ名とパスワードを設定すると、共有ファイルにアクセス出来るようになりました。お恥ずかしい…
こちらの方は VC++ で作成したプログラムで、ネットワークドライブとして割り当てる事が出来ました。 ひとつ気になるのは、エクスプローラではファイルにアクセスできるのに、ASP.NET からアクセスしようとすると、"パス "Z:foo.txt" の一部が見つかりませんでした。" の例外が発生する事です。(手動で割り当てても同じでした。) 今回は UNC 形式でファイルを指定していきます。 どうも、ありがとうございました。m(_ _)m [ メッセージ編集済み 編集者: ひでたつ 編集日時 2002-09-30 11:42 ] | ||||||||
|
投稿日時: 2002-09-30 14:47
こんにちは。
おそらく、この記事がヒントになるのではないでしょうか。このスレッドでは、 >>Shell.Application オブジェクトを作ると、何が可能になるか調べましたか? >>例えば任意のフォルダやファイルを列挙することができます。 >>そんな情報を、インターネットで Web ページを見ている最中に、勝手に収集されて、 >>勝手にどこ かへ送信されても良いですか? (あなたは、それを望みますか?) とありますが、反対に、共有しているディレクトリに勝手に何かを書き加えられたらどうでしょう?あなたの共有ディレクトリに勝手に書き込まれることを望みますか?「読みたいだけなのに」と思っても、システムにとってはその気持ちはわかりません。そのため、デフォルトではすべてシャットアウトします。 設定を変えれば、特定のアセンブリに特定のファイルに特定の方法でアクセすることを許可できます。 | ||||||||
|
投稿日時: 2002-09-30 16:21
Jitta 様
こんにちは。 大変参考になりました。 どうも、ありがとうございました。m(_ _)m | ||||||||
|
投稿日時: 2002-09-30 17:03
はじめまして。
ファイルアクセスができないのが、 コードベースセキュリティの制限というのが 釈然としなかったので、わたしの考えを書かせていただきます。 まず、前提として remotemachine = 共有ディレクトリを提供しているコンピュータ localmachine = ASP.NET が動作しているコンピュータ と、します。 ここで、localmachine 上で動作している CLR が 保護しなければならない対象は localmachine 自体であって remotemachine のリソースへの読み書きを制限し、 保護する理由はありません。 remotemachine に存在するプログラムの実行が制限されるのは そのプログラムが localmachine への危険となる可能性があるからです。 仮に CLR が remotemachine のリソースを保護しているならば CLR を通さない、win32 ネイティブアプリケーションは 好き放題できることになります。それはおかしいですよね? remotemachine のリソースを保護する責任があるのは remotemachine 自身です。 remotemachine のセキュリティシステムが localmachine の アクセスを拒否しているはずです。 以下、Microsoft のナレッジベースで今回の件に 該当するであろうリンクを示します。 http://support.microsoft.com/default.aspx?scid=kb;ja;JP189408 http://support.microsoft.com/default.aspx?scid=kb;ja;JP257174 | ||||||||
|
投稿日時: 2002-09-30 17:45
鈴 様
はじめまして。
そうですね。この事を頭に入れておきます。 教えて頂いたリンクの方も参考になりました。 どうも、ありがとうございました。m(_ _)m |
1