我已經創建了一個應用程序來爲我們的AD域標準化用戶創建。現在我想能夠在文件夾上創建,共享和設置權限。我知道如何創建一個遠程文件夾,但我不清楚在VB08中共享和設置權限的最佳方法。以編程方式在新主文件夾上創建和設置權限
由於提前,
克里斯托弗
我已經創建了一個應用程序來爲我們的AD域標準化用戶創建。現在我想能夠在文件夾上創建,共享和設置權限。我知道如何創建一個遠程文件夾,但我不清楚在VB08中共享和設置權限的最佳方法。以編程方式在新主文件夾上創建和設置權限
由於提前,
克里斯托弗
這裏是很好的教程http://weblogs.asp.net/cumpsd/archive/2004/02/08/69403.aspx ,你可以從%HOMEPATH%ENV回家路。變量
只是讓人們知道我最終做了什麼,這裏是創建遠程文件夾的最終成功代碼,將文件夾上的NTFS權限設置爲完全控制所選用戶,然後在新文件夾上創建共享爲每個人提供完整的權限。
using System.IO;
using System.Management;
using System.Security.AccessControl;
public static void CreateFolder(String accountName, String homeFolder)
{
String folderName;
String localfolderpath;
String shareName;
try
{
folderName = "\\\\server\\c$\\Home\\" + homeFolder + "\\" + accountName;
Directory.CreateDirectory(folderName);
localfolderpath = "C:\\Home\\" + homeFolder + "\\" + accountName;
shareName = accountName + "$";
FolderACL(accountName, folderName);
makeShare(localfolderpath, shareName);
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.ToString());
}
}
public static void FolderACL(String accountName, String folderPath)
{
FileSystemRights Rights;
//What rights are we setting?
Rights = FileSystemRights.FullControl;
bool modified;
InheritanceFlags none = new InheritanceFlags();
none = InheritanceFlags.None;
//set on dir itself
FileSystemAccessRule accessRule = new FileSystemAccessRule(accountName, Rights, none, PropagationFlags.NoPropagateInherit, AccessControlType.Allow);
DirectoryInfo dInfo = new DirectoryInfo(folderPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out modified);
//Always allow objects to inherit on a directory
InheritanceFlags iFlags = new InheritanceFlags();
iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
//Add Access rule for the inheritance
FileSystemAccessRule accessRule2 = new FileSystemAccessRule(accountName, Rights, iFlags, PropagationFlags.InheritOnly, AccessControlType.Allow);
dSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule2, out modified);
dInfo.SetAccessControl(dSecurity);
}
private static void makeShare(string filepath, string sharename)
{
try
{
String servername = "server";
// assemble the string so the scope represents the remote server
string scope = string.Format("\\\\{0}\\root\\cimv2", servername);
// connect to WMI on the remote server
ManagementScope ms = new ManagementScope(scope);
// create a new instance of the Win32_Share WMI object
ManagementClass cls = new ManagementClass("Win32_Share");
// set the scope of the new instance to that created above
cls.Scope = ms;
// assemble the arguments to be passed to the Create method
object[] methodargs = { filepath, sharename, "0" };
// invoke the Create method to create the share
object result = cls.InvokeMethod("Create", methodargs);
MessageBox.Show(result.ToString());
}
catch (SystemException e)
{
Console.WriteLine("Error attempting to create share {0}:", sharename);
Console.WriteLine(e.Message);
}
}
你真的認爲我能理解這個爛攤子裏的東西嗎? – Andrey 2010-04-05 15:28:09
不,我不是我想要得到正確的代碼格式,對不起。 – Christopher 2010-04-05 15:31:43