net use \\172.18.1.118\共有フォルダ /user:username password
コマンドをVB.netから投入してみたらどうでしょうか。
VBでの共有フォルダ接続について
解決したいこと
ボタンを押すと共有フォルダに接続されるコードをVBで書いているがうまく接続されない。
以下コード
Imports System.Runtime.InteropServices
Imports System.Security.Cryptography.X509Certificates
Public Class Form1
"WNetAddConnection2関数をインポート(接続)
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _
(ByRef lpNetResource As NetResource, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer
' 接続リソースを定義
Public Structure NetResource
Public dwScope As Integer
Public dwType As Integer
Public dwDisplayType As Integer
Public dwUsage As Integer
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'接続する
Dim sharedFolderPath As String = "\\172.18.1.118\共有フォルダ"
Dim username As String = "username" ' ユーザー名を指定してください
Dim password As String = "password" ' パスワードを指定してください
Try
Dim netResource As New NetResource()
netResource.dwScope = 0 ' RESOURCE_GLOBALNET
netResource.dwType = 1 ' RESOURCETYPE_DISK
netResource.dwDisplayType = 0 ' RESOURCEDISPLAYTYPE_SHARE
netResource.dwUsage = Nothing
netResource.lpComment = Nothing
netResource.lpLocalName = Nothing
netResource.lpProvider = Nothing
netResource.lpRemoteName = sharedFolderPath
Dim result2 As Integer = WNetAddConnection2(netResource, password, username, 0)
If result2 = 0 Then
MessageBox.Show("共有フォルダに接続しました。", "成功")
Else
MessageBox.Show("エラーが発生しました。エラーコード: " & result2, "エラー")
End If
Catch ex As Exception MessageBox.Show("エラーが発生しました: " & ex.Message, "エラー")
End Try
End Sub
End Class
(結果)
以下のように接続できましたというメッセージは出るのですが、
lpLocalName が NULL の場合は、ローカルデバイスのリダイレクトなしでネットワーク資源に接続する認識です。
lpLocalName をU:などのローカルドライブにすれば接続できます。
ネットワークに接続したいのですが、原因等ご教示いただけないでしょうか。
3Answer
開発環境 (OS, Visual Studio のバージョン、ターゲットフレームワークなど) と、何を作っているか (WinForms?) を書いてください
こちらは公式のサンプルです。
dwFlagsにCONNECT_UPDATE_PROFILEを指定して、永続化する必要があるかも。
CONNECT_UPDATE_PROFILE
0x00000001
ネットワーク リソース接続を記憶する必要があります。
このビット フラグが設定されている場合、オペレーティング システムは、ユーザーがログオンしたときに接続の復元を自動的に試行します。
オペレーティング システムでは、ローカル デバイスをリダイレクトする正常な接続のみが記憶されます。 失敗した接続やデバイスレス接続は記憶されません。 ( lpLocalName メンバーが NULL であるか、空の文字列を指している場合、デバイスレス接続が発生します)。
このビット フラグがクリアされている場合、ユーザーがログオンしたときに、オペレーティング システムは接続の復元を試みません。
あと、どこを参考にしたかは知りませんが、ファイル名にUnicodeでしか扱えない文字があった時に困った事になるので、ANSI版のWinAPIや構造体を使用するのはやめたほうがいいです。VB.NETのサンプルだと、APIや構造体の宣言部はこちらが比較的まともそう。