2
注意:請不要忽視與其他人類似的標題。將「Everyone」權限添加到文件夾的網絡共享中
我試圖在Windows 7機器上共享文件夾。我想通過C#給每個人完整的權限。
我在其他網頁上看過幾篇文章,包括這裏,告訴我該怎麼做。但是和其他人一樣,這對我不起作用。以下是摘自SO的摘錄。
DirectorySecurity sec = Directory.GetAccessControl(path);
// Using this instead of the "Everyone" string means we work on non-English systems.
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.FullControl | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(path, sec);
在我調用上面的代碼之前共享該文件夾已經完成。下面的圖像是什麼,我得到的結果:
到目前爲止,一切都很好。但在下一張圖片中,您會看到剩餘的兩個複選框仍未選中。
我在想什麼嗎?
謝謝!
編輯:下面是用於做實際共享的代碼。
private static void QshareFolder(string FolderPath, string ShareName, string Description)
{
try
{
ManagementClass managementClass = new ManagementClass("Win32_Share");
ManagementBaseObject inParams = managementClass.GetMethodParameters("Create");
ManagementBaseObject outParams;
inParams["Description"] = Description;
inParams["Name"] = ShareName;
inParams["Path"] = FolderPath;
inParams["MaximumAllowed"] = null;
inParams["Password"] = null;
inParams["Access"] = null;
inParams["Type"] = 0x0; // Disk Drive
// Invoke the method on the ManagementClass object
outParams = managementClass.InvokeMethod("Create", inParams, null);
// Check to see if the method invocation was successful
if ((uint) (outParams.Properties["ReturnValue"].Value) != 0)
{
throw new Exception("Unable to share directory.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "error!");
}
}
我添加了用於執行上述共享的代碼。那是我需要修改的嗎? – JimDel 2012-04-12 18:53:30
是的。注意:您需要兩個片段 - ACL上的文件夾和共享上的ACL。 – 2012-04-12 19:34:41
感謝您的鏈接,但C++的信息並沒有多大幫助。 – JimDel 2012-04-13 14:37:15