|
分類:[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側でコンパイル)
|