フォルダの共有
- 題名: フォルダの共有
- 著者: がぶりぇる
- 日時: 2008/06/27 11:02:40
- ID: 22359
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: フォルダの共有
- 著者: オショウ
- 日時: 2008/06/29 21:51:36
- ID: 22369
- この記事の返信元:
-
[22359] フォルダの共有 がぶりぇる 2008/06/27 11:02:40
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: フォルダの共有
- 著者: がぶりぇる
- 日時: 2008/06/30 9:40:29
- ID: 22371
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
VB6.0で作成していたソフトを改造し、ソフトからメール送信等の処理を行いたいため、
.NETに変換しようと思い、最近になって.NETを使用し始めました。
そのソフト内でフォルダを共有化する処理があったのですが、
NetShareAddを使用していたので、過去ログ内のhttp://dobon.net/vb/bbs/log3-13/7329.html
を参考にコードを修正しました。
コード部分でブレークポイントを入れ、ステップインにて実行すると問題なく共有化されるのですが、
ブレークポイントを入れずに実行した場合はエラーとなり共有化が行われません。
ステップイン実行時は問題なく共有化されるため原因がわからずに困っている状況です。
どうか、ご教授ください。
Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Friend Class frm_main
Inherits System.Windows.Forms.Form
'リソースの共有を設定する関数
Private Declare Function NetShareAdd Lib "netapi32.dll" (ByVal ServerName As String, ByVal level As Integer, ByRef buf As SHARE_INFO, ByRef parm_err As Integer) As Integer
'共有情報
Private Structure SHARE_INFO
Dim shi2_netname As Integer
Dim shi2_type As Integer
Dim shi2_remark As Integer
Dim shi2_permissions As Integer
Dim shi2_max_uses As Integer
Dim shi2_current_uses As Integer
Dim shi2_path As Integer
Dim shi2_passwd As Integer
End Structure
'-----------------------------------------------------
'@(f)
'
'機能 :フォームロード処理
'
'-----------------------------------------------------
Private Sub frm_main_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
''フォルダを共有
Call DriveShare()
End Sub
Private Sub DriveShare()
'共有フォルダ作成
Dim strServerName As String
Dim udtShareInfo As SHARE_INFO
Dim lngReturn As Integer
Dim lngParmErr As Integer
Dim CheckFlg As Boolean
Dim gchNetName As GCHandle
Dim gchRemark As GCHandle
Dim gchPath As GCHandle
Dim gchPassword As GCHandle
CheckFlg = OSCheck ''NT系OS時はTrueを返す
If CheckFlg = True Then
'サーバ名を設定(空文字の場合はローカルコンピュータ)
strServerName = ""
'共有情報を設定
With udtShareInfo
gchNetName = GCHandle.Alloc("UCAMフォルダ", GCHandleType.Pinned)
.shi2_netname = gchNetName.AddrOfPinnedObject().ToInt32()
.shi2_type = STYPE_DISKTREE
gchRemark = GCHandle.Alloc("UCAMフォルダ", GCHandleType.Pinned)
.shi2_remark = gchRemark.AddrOfPinnedObject().ToInt32()
.shi2_permissions = 0
.shi2_max_uses = 4
.shi2_current_uses = 0
gchPath = GCHandle.Alloc(My.Application.Info.DirectoryPath, GCHandleType.Pinned)
.shi2_path = gchPath.AddrOfPinnedObject().ToInt32()
gchPassword = GCHandle.Alloc("", GCHandleType.Pinned)
.shi2_passwd = gchPassword.AddrOfPinnedObject().ToInt32()
End With
'指定したリソースを共有
lngReturn = NetShareAdd(strServerName, 2, udtShareInfo, lngParmErr)
''正常終了・すでに共有されてる場合以外
If (lngReturn <> 0) And (lngReturn <> 2118) Then
MsgBox("共有化失敗!" & vbCrLf & "エラーコード:" & lngReturn, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "エラー")
End
End If
gchNetName.Free()
gchRemark.Free()
gchPath.Free()
gchPassword.Free()
End If
End Sub
End Class
ステップイン実行時はlngReturnに「0」か「2118」が帰ってきます。
(すでに共有されている場合は2118が帰ってきています)
ブレークポイントを設定せずに実行すると「123」が返されます。
WIN32エラーコードを見ると
ERROR_INVALID_NAME 123 ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
となっているのですが、どう回避していいのかわからないのです。