WNetAddConnection2で接続後、切断するには?

解決


豚猫  2005-08-02 20:45:42  No: 91225

いつも、参考にさせて頂いております。豚猫です。

この度、複数のマシンに対し、コピーを行うツールを開発しております。
そこで、当初は、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 】の部分にドライブを指定せずとも
接続を行うことができました。

この場合、切断を行う必要はないのでしょうか?
また、切断を行う場合は、どのように記述すればよろしいのでしょうか。

以上、ご教示よろしくお願いします。


K.J.K.  2005-08-03 19:37:33  No: 91226

ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
するのであれば、vbNullStringで問題ありません。

で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
実際に切断するかどうかは運用方法にも依存するのでは。


豚猫  2005-08-03 19:48:52  No: 91227

K.J.K様ご回答ありがとうございます。

>ローカルデバイスへリダイレクトさせずにネットワーク資源に接続
>するのであれば、vbNullStringで問題ありません。
>で、切断は、WNetDisconnectDialog1辺りが対にはなっています。
>実際に切断するかどうかは運用方法にも依存するのでは。

運用方法としては、サーバー上でタスク処理を行うのか、
もしくはクライアント側で、不定期に処理を行うのか
まだ決まっていない状態なのですが、
もし、サーバー上で使用した場合、資源がどんどん溜まっていくのでは
ないのか、と思い不安になりました^^;
資源の解放等、行わずに
イメージとしては、
エクスプローラ上で違うドメイン上のマシンを
参照する際に、ユーザーとパスワードを聞いてくるダイアログで
入力し参照する
と、いったイメージでよろしいでしょうか。
もし、そうなのであれば開放等を意識せずに処理が行えると思います。

以上、重ねてご教示願います。


K.J.K.  2005-08-04 19:09:59  No: 91228

質問内容の意図が読み取れません。

WNetAddConnection2もWNetDisconnectDialog1も、ハンドルのようなもの
を管理しそれを返す・利用する関数ではありませんよね。


豚猫  2005-08-08 18:37:52  No: 91229

K.J.K様

質問内容が適切ではなく、伝わりにくい
部分があったようで、申し訳ありません。

上記ソースにて、ローカルドライブを指定せずに、
任意のマシンへ接続を行っております。

lpLocalName = "Z:"

上記のようにドライブを指定する場合には、
切断を行う必要があると思います。

今回記述しました、ソース上では
ドライブを指定していないので、
イメージとしては、

手動で、エクスプローラを開き、
異なるドメインのマシンを開いた場合、
ユーザとパスワードを聞いてくるダイアログが
表示されると思います。

そこで、ユーザーとパスワードを入力すると、
そのマシンの共有されているフォルダの一覧が
表示されると思います。

この、パスワードとユーザーを入力する部分が
上記ソースに該当するのかと、思いました。

ですので、切断などは特に行わずに、
現在使用しているマシンに、上記ソースにて
接続を行ったマシンに、「こういうマシンがあるよ」と
認識させるだけの作業と思っております。

またもや、意図が読みきれない部分があるかと思います。
申し訳ありません。

他のサイトにて、調べたところ、
lpLocalName に指定しない場合は、
特に切断等を意識する必要はないと、記述がありました。

今回の操作において、切断するか、否かということが
問題でしたので、【切断しないでよい】という判断で
解決としたいと思います。

K.J.K様、ご回答ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加