いつも、参考にさせて頂いております。豚猫です。
この度、複数のマシンに対し、コピーを行うツールを開発しております。
そこで、当初は、INIファイル等で接続先のマシン名及びアカウント情報を
管理し、DOSコマンドの【NET USE】にて接続後、そのドライブに対し、
コピーを行うような仕様だったのですが、
他のツールでも指定されたマシンに接続する必要がありますので、
初期処理的なものを作成しようかと検討中です。
そこで、WNetAddConnection2関数を使用し、接続を行おうと思ったのですが。
Dim udtNetResource As tagNETRESOURCE
Dim lngWin32apiResultCode As Long
' リソースの詳細を設定
With udtNetResource
.dwScope = RESOURCE_GLOBALNET
' リソースの種類
.dwType = RESOURCETYPE_DISK
' 空の文字列を代入
.lpLocalName = vbNullString
' ネットワークリソースの共有名
.lpRemoteName = sPcName
End With
' ネットワークリソースに接続
lngWin32apiResultCode = WNetAddConnection2(udtNetResource, sPassword, sUserName, CONNECT_UPDATE_PROFILE)
' 接続に失敗した場合はメッセージボックスを表示
If lngWin32apiResultCode <> NO_ERROR Then
MsgBox sPcName & "への接続に失敗しました。", vbExclamation, "エラーメッセージ"
End If
上記ソース上で、【lpLocalName 】の部分にドライブを指定せずとも
接続を行うことができました。
この場合、切断を行う必要はないのでしょうか?
また、切断を行う場合は、どのように記述すればよろしいのでしょうか。
以上、ご教示よろしくお願いします。
ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
するのであれば、vbNullStringで問題ありません。
で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
実際に切断するかどうかは運用方法にも依存するのでは。
K.J.K様ご回答ありがとうございます。
>ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
>するのであれば、vbNullStringで問題ありません。
>で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
>実際に切断するかどうかは運用方法にも依存するのでは。
運用方法としては、サーバー上でタスク処理を行うのか、
もしくはクライアント側で、不定期に処理を行うのか
まだ決まっていない状態なのですが、
もし、サーバー上で使用した場合、資源がどんどん溜まっていくのでは
ないのか、と思い不安になりました^^;
資源の解放等、行わずに
イメージとしては、
エクスプローラ上で違うドメイン上のマシンを
参照する際に、ユーザーとパスワードを聞いてくるダイアログで
入力し参照する
と、いったイメージでよろしいでしょうか。
もし、そうなのであれば開放等を意識せずに処理が行えると思います。
以上、重ねてご教示願います。
質問内容の意図が読み取れません。
WNetAddConnection2もWNetDisconnectDialog1も、ハンドルのようなもの
を管理しそれを返す・利用する関数ではありませんよね。
K.J.K様
質問内容が適切ではなく、伝わりにくい
部分があったようで、申し訳ありません。
上記ソースにて、ローカルドライブを指定せずに、
任意のマシンへ接続を行っております。
lpLocalName = "Z:"
上記のようにドライブを指定する場合には、
切断を行う必要があると思います。
今回記述しました、ソース上では
ドライブを指定していないので、
イメージとしては、
手動で、エクスプローラを開き、
異なるドメインのマシンを開いた場合、
ユーザとパスワードを聞いてくるダイアログが
表示されると思います。
そこで、ユーザーとパスワードを入力すると、
そのマシンの共有されているフォルダの一覧が
表示されると思います。
この、パスワードとユーザーを入力する部分が
上記ソースに該当するのかと、思いました。
ですので、切断などは特に行わずに、
現在使用しているマシンに、上記ソースにて
接続を行ったマシンに、「こういうマシンがあるよ」と
認識させるだけの作業と思っております。
またもや、意図が読みきれない部分があるかと思います。
申し訳ありません。
他のサイトにて、調べたところ、
lpLocalName に指定しない場合は、
特に切断等を意識する必要はないと、記述がありました。
今回の操作において、切断するか、否かということが
問題でしたので、【切断しないでよい】という判断で
解決としたいと思います。
K.J.K様、ご回答ありがとうございました。
ツイート | ![]() |