お世話になってます!
以下のようなことをしたいのですが、方法はりますでしょうか?
●したいこと
・サーバー①とクライアントPC②がありました。
・サーバー①にはC:\共有フォルダ③があり
・クライアントPC②からそれを \\サーバー①\共有フォルダ③で見るこ
とができます。
・このときサーバー①でプログラムを動作させ、
入力で「\\サーバー①\共有フォルダ③」の情報を与え
結果の「C:\共有フォルダ③」
を取得したい。
●環境
サーバー
・windows server 2003
・.NET Framework 2.0
・VB.NET 2005
安直にやるなら、
コマンドプロンプトで
Net Share
の結果を得て該当する行を得るとか。
コマンド実行と取得はこういうのの応用で。
http://dobon.net/vb/dotnet/process/standardoutput.html
APIならNetShareEnumですかね。
http://www.pinvoke.net/default.aspx/netapi32/NetShareEnum.html
取得方法としては幾つかありますが、まずは WMI を用いた方法を。
Imports System
Imports System.Management
Imports System.Collections.Generic
Public Module Module1
Public Sub Main()
Dim list As Dictionary(Of String, String) = GetSharedResources()
For Each Item As KeyValuePair(Of String, String) In list
Console.WriteLine("{0} = '{1}'", Item.Key, Item.Value)
Next
MsgBox("列挙完了", vbInformation Or vbSystemModal)
End Sub
Public Function GetSharedResources() As Dictionary(Of String, String)
GetSharedResources = New Dictionary(Of String, String)()
For Each mo As ManagementObject In New ManagementClass("Win32_Share").GetInstances()
GetSharedResources.Add(CStr(mo("Name")), CStr(mo("Path")))
Next
End Function
End Module
> VB.NET 2005
すなわち VB2005 ですね。(.NET の名を製品名に冠するのは 2003 までです。)
だいさん界の魔界の仮面弁士ありがとうございます。
今のところWMIで動かすのがベターかなと思っていますが、
魔界の仮面弁士のサンプルのどこに\\サーバー①\共有フォルダ③を
入れたらいいのかわかりません。
申し訳ありませんが、教えてください。
> だいさん界の魔界の仮面弁士ありがとうございます。
# うっかり、「大殺界の魔界の仮面弁士」と読みかけた…。
> 魔界の仮面弁士のサンプルのどこに
結果は Dictionary で受けているので、その一覧に対して
If list.ContainsKey(strFolderName) Then
MsgBox( list(strFolderName) )
End If
とすれば検索できるかと思います。
あるいは全部列挙してから取得するのでは無く、
Dim s As String = String.Format( _
"SELECT Path FROM Win32_Share WHERE Name = '{0}' AND Type = 0", _
Replace(strFolderName, "\", "\\"))
のような WQL を ManagementObjectSearcher で呼び出すとか。(未確認)
> 入れたらいいのかわかりません。
今回はサーバー上で動かすので、サーバー名は使いません。
UNC による指定では無く、共有フォルダ名だけを指定してみてください。
# 権限さえあれば、別サーバの \root\cimv2:Win32_Share に接続することも
# できますが、今回はその必要も無さそうですし。
魔界の仮面弁士さんありがとうございます!
また名前めちゃめちゃ&呼捨してしまいごめんなさい。
サンプルの意味理解できました!
解決しそうです。ありがとうございました。