C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 共有フォルダーのアクセス権が設定出来ません?


(過去ログ 120 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■70344 / inTopicNo.1)  共有フォルダーのアクセス権が設定出来ません?
  
□投稿者/ asoyone (1回)-(2014/03/13(Thu) 16:34:16)

分類:[VB.NET/VB2005 以降] 

 VB.netのプログラミングを始めて5年目の初心者です。
自分のPCから、自社LAN上の他のPCにファイルをコピーするプログラム(以下PGと略す)を作成中です。
下記のコピー部分で旨く動作させる為の、共有フォルダーのアクセス権の設定が出来ません?

	Dim ogp as String = "C:\Test\コピー元ファイル名"
	Dim dsp as String = "\\コピー先PC名\コピー先共有化Folder\コピー先ファイル名"
	If File.Exists(ogp) = True Then
        File.Copy(ogp, dsp, True)		← (イ)ここで止まる
    End If

勿論、dspをあらかじめ、手動で共有化しEveryoneにFull Controlのアクセス権を設定しておくと問題なくコピー出来ます。
ですが、コピー先が「Program Filse」の中なので、共有化したままにしておく事も出来ません。
そこで、コピー先のPCに、別のPGを走らせておき、
  @ コピーの直前に、別のPGにコマンドを送り、コピー先のFolderを共有化させる。
  A 共有化されたのを確認して、コピー処理を行う。
  B 別のPGにコマンドを送り、@で共有化したFolderの共有化を取り消す。
というアルゴリズムで、コピーしようとしています。

上記の処理の内、他のPGに共有化させる方法は旨く動作しています。他のPC上でもそのフォルダーが共有化されているのを確認していますし、自分の側にも共有化されたフォルダーが表示されて、その中身を覗く事が出来ます。又、PGでコピー先ファイルの有無を調べる方法で、PG上もそのFolderが読み出せる状態にある事も確認しています。

上記のPGで共有化したFolderを調べて見ると、アクセス権が設定されていません。
そこで、下記の様なアクセス権の設定PGを作成して、試みましたが、旨く、アクセス権を設定出来ません。
このルーチンも、コピー先PCのPGの中で、フォルダー共有化後に実行される様に仕組んでいます。

    Public Sub Dir_Access_Right_Set(ByVal dpath As String)    ' Dirアクセス権の設定
        Dim DirInfo As New System.IO.DirectoryInfo(dpath)
        Try
            Dim DirSec As DirectorySecurity
            DirSec = DirInfo.GetAccessControl()
            'アクセス権限を指定
            Dim AccessRule As New FileSystemAccessRule( _
                "Everyone", _
                 FileSystemRights.FullControl, _
                 InheritanceFlags.ContainerInherit, _
                 PropagationFlags.None, _
                 AccessControlType.Allow)
            'アクセス権限を追加
            DirSec.AddAccessRule(AccessRule)
            DirInfo.SetAccessControl(DirSec)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

上記のルーチンを実行後、手動でFolderのプロパティーの「共有」の「詳細な共有」で確認するとEveryoneのFull Controlのアクセス権が設定されていません。上記PG実行時に、エラーは発生していません。

ここが解決出来ないと前に進めません!
単純な問題かもしれませんが、この問題で、3日も足踏みしています。
何処に問題があるのか、ヒントなり、解決方法をご教授願えると幸いです。

Test環境
自己PC側 : Windows8.1 64bit
相手PC側 : Windows7   32bit
開発環境 : Microsoft Visual Studio 2010(.NET FRAMEWORK 4)(Windows8.1側でコンパイル)

引用返信 編集キー/
■70345 / inTopicNo.2)  Re[1]: 共有フォルダーのアクセス権が設定出来ません?
□投稿者/ a (15回)-(2014/03/13(Thu) 16:53:34)
もうちょっと簡単な仕組みしたらどうですか?
1.コピー先に適当な共有フォルダを作っておく(c:\shareなど)
2.コピー元でファイルコピー実行
3.コピー完了後、コピー先PGに通知(対象ファイル名またはフォルダ名?も通知)
4、コピー先PGが本来ファイルを置くべき場所にリネーム

※現在の構想だと共有した後にプログラム飛んだら共有を維持し続けそうで怖いですね。

権限については俺もやったことがないので、興味本位で調べてみようw
引用返信 編集キー/
■70346 / inTopicNo.3)  Re[2]: 共有フォルダーのアクセス権が設定出来ません?
□投稿者/ asoyone (2回)-(2014/03/13(Thu) 17:35:01)
No70345 (a さん) に返信
> もうちょっと簡単な仕組みしたらどうですか?
> 1.コピー先に適当な共有フォルダを作っておく(c:\shareなど)
> 2.コピー元でファイルコピー実行
> 3.コピー完了後、コピー先PGに通知(対象ファイル名またはフォルダ名?も通知)
> 4、コピー先PGが本来ファイルを置くべき場所にリネーム
>
> ※現在の構想だと共有した後にプログラム飛んだら共有を維持し続けそうで怖いですね。
>
> 権限については俺もやったことがないので、興味本位で調べてみようw


早速のご返事利有り難う御座います。
ご指摘の方法は、現在の方法がダメな場合、その様な方法しかないのかなと考えていました。

> ※現在の構想だと共有した後にプログラム飛んだら共有を維持し続けそうで怖いですね。
ご指摘の通りですね!!!
その意味では、安全性を考えて、ご指摘の方向に、方針変換します。

でも、PGがちゃんと通るのに、アクセス権が設定出来ないのは、良くないですよね!
後日の為にも、何故、ダメなのか、何か考え違いがあるのではないか?
そのあたりの情報が分かれば、ありがたいです。

引用返信 編集キー/
■70351 / inTopicNo.4)  Re[3]: 共有フォルダーのアクセス権が設定出来ません?
□投稿者/ a (16回)-(2014/03/14(Fri) 14:50:12)
No70346 (asoyone さん) に返信
> ■No70345 (a さん) に返信
> でも、PGがちゃんと通るのに、アクセス権が設定出来ないのは、良くないですよね!
> 後日の為にも、何故、ダメなのか、何か考え違いがあるのではないか?
> そのあたりの情報が分かれば、ありがたいです。
>
Win7で見えるフォルダの情報ベースの話になってしまいます(俺の環境がWIN7なので)が、「セキュリティ」と「共有のアクセス許可」の両方を設定しないとダメです。
セキュリティ・・・・・・フォルダプロパティ表示時の「セキュリティ」タブ
共有のアクセス許可・・・フォルダプロパティ表示時の「共有」タブの「詳細な共有」⇒「アクセス許可」

No.70344 で提示されているPGはセキュリティ部に追加を行っており、「共有のアクセス許可」側には追加または設定処理は行われていないみたいです。

WMIの方法になってしまいますが、↓と組み合わせるととりあえずできました。
_ttp://knman.sakura.ne.jp/wordpress/?p=1825

※俺も手探りなので間違ってるとこあったら他の方ばんばん横槍入れて。
 そして.NETのクラスだけでできるならその情報も今後のためにほしい^^
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -