- 締切済み
VBで「ファイル名を指定して実行」と同様の動きを再現
VB6、WindowsXP VBのプログラムからあるフォルダを開きにいく単純なプログラムを作成しています。 通常のローカルフォルダであれば、Shell関数でExplorer.exeにパスを渡すだけで問題ないのですが、うまくいかないのは、 開きにいくパスがネットワークパス(\\[サーバ名]\[共有名])の場合で、サーバーにアクセスするのに認証が必要となる場合です。 ファイル名を指定して実行に「\\[サーバ名]\[共有名]」を打ち込んで実行した場合は、Windowsが出してくる認証ダイアログ(ユーザ名、パスワードを聞いてくる)が表示されて、ユーザーが正しいID、パスワードを入力すれば、エクスプローラで共有フォルダが開きます。 この動きがまさにやりたいことなのですが、 Shell関数を使用した場合、引数に「Explorer.exe \\[サーバ名]」と指定した場合はファイル名を指定して実行と同じなのですが、 「Explorer.exe \\[サーバ名]\[共有名]」を指定した場合、認証ダイアログが表示されずにエラー(ディレクトリが無効というような)となってしまいます。おそらく先にサーバ認証を行わずに直接共有を見に行ってしまって存在が掴めないのだと思います。 VBでファイル名を指定して実行と同様の動きを再現する方法をどなたかご存知ないでしょうか? 尚、shellexecuteやVB.NETでprocess.startなどでもやってみましたがshell関数と同じ動きでした。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
net.exeでドライブを割り当ててから Explorerを起動してみましょう Shell "net.exe use z: \\サーバー名\共有名 パスワード /user:ユーザー名" Shell "explorer.exe \\サーバー名\共有名",vbNormalFocus といった具合で接続、表示を行い Form_Unloadなどで Shell "net.exe use z: /delete" といった具合で切断しましょう
補足
ご回答ありがとうございます。質問が言葉足らずだったかも知れませんが、客先からの要望では、あくまでも「ファイル名を指定して実行」で共有パスを指定したときと同じように、Windowsが出してくる認証ダイアログを利用してユーザにユーザ名とパスワードを入力させたいそうです。net useを使う場合は前もってユーザ名、パスワードを入力させる画面を作るか、DOSプロンプトで入力させるかしないといけないのでイメージが違いそうです。