#ref(sharefolder.png,right,around);
一応説明すると、[[CIFS:http://www.itmedia.co.jp/dict/network/protocol/netbeui/03416.html]](Common Internet File System)とは、MicrosoftのSMBプロトコルを拡張し、その仕様が公開されているものです。~
簡単にフォルダをネットワーク内で共有できるようにするアレです。利用頻度はかなり高いと思いますが、これをプログラムから管理しようとすると、やや面倒なことになります。~
[[WSHの場合>WSH/フォルダのCIFS共有]]と比較してみてください。
#contents
#br
*** WMI(Windows Management Instrumentation)を使う
.NETらしさを損なわない方法。NTドメインに対応していたり、リモートPCの制御までできるようですが、仕組みが少し複雑になりますね。System.Managament.dllを参照設定してusing System,Managementしてください。
.NETらしさを損なわない方法。NTドメインに対応していたり、リモートPCの制御までできるようですが、仕組みが少し複雑になりますね。System.Managament.dllを参照設定してusing System.Managementしてください。
ManagementPath path = new ManagementPath();
// remote server NetBios name or host name
path.Server = "{computername}";
path.NamespacePath = @"root\CIMV2";
path.RelativePath = @"Win32_Share";
ConnectionOptions co = new ConnectionOptions();
// account with WMI access privileges on remote server
// (Remote enabled, execute methods ....)
//co.Username = "{username}";
//co.Password = "{userpassword}";
// downlevel domain name or server name if local account
//co.Authority = "NTLMDOMAIN:domainname";
ManagementScope scope = new ManagementScope(path, co);
ManagementClass mc = new ManagementClass(scope, path, null);
ManagementBaseObject inParams = mc.GetMethodParameters("Create");
inParams["Name"] = "share_name";
inParams["Path"] = @"d:\share_folder";
inParams["Type"] = 0;
inParams["Access"] = null;
inParams["Description"] ="共有フォルダの説明";
inParams["MaximumAllowed"] = 5;
ManagementBaseObject mbo = mc.InvokeMethod("Create", inParams, null);
uint result = (uint) mbo.Properties["ReturnValue"].Value;
// 0 = success
*** Win32API(NetApi32.dll)を使う
旧APIを使う方法もあります。次期WindowsからWin32APIが無くなるということなので、こういった方法は極力避けたいですね。
#ref(NetApi32.cs);
*** Windows Scripting Host Network object(WshNetwork)を使う
WSHはこの辺の機能を独自に実装しています。COMとして公開されているので、C#からこれを呼び出すという手はあります。~
利用法は、WSH関連ページとして近日公開。