2011-06-13 130 views
2

我正在研究.NET類,它將用於管理我們的Active Directory帳戶的工具。我們的每個帳戶都有一個網絡主目錄,根據我們正在使用的帳戶類型,它可以位於兩臺不同的服務器上。如何共享遠程文件夾?

我可以創建和刪除文件夾就好了,但我遇到了共享文件夾的麻煩。 I found some code here這似乎是我想要的,但它不適合我。我得到的返回值是2,但我不確定那是什麼表示。

這不應該是文件權限問題,因爲我以我自己的方式運行我的測試應用程序,並且我完全控制了要共享的文件夾(及其每個父文件夾)。

這裏是代碼的我(修改)版本:

char[] delim = { '\\' }; 
// folderPath is a string (UNC path) 
string[] drivePath = folderPath.Split(delim); 

// Create a ManagementClass object 
ManagementClass managementClass = new ManagementClass("Win32_Share"); 

// Create ManagementBaseObjects for in and out parameters 
ManagementBaseObject inParams = 
    managementClass.GetMethodParameters("Create"); 
ManagementBaseObject outParams; 

// Set the input parameters 
inParams["Description"] = ""; 
inParams["Name"] = drivePath[3]; 
inParams["Path"] = folderPath; 
inParams["Type"] = 0x0; // Disk Drive 

// Invoke the method on the ManagementClass object 
outParams = managementClass.InvokeMethod("Create", inParams, null); 

我試過輸出等outParams,但它看起來像返回值是我得到的。

有沒有不同的方式來共享遠程文件夾,可以更好地工作?

回答

1

我會回答自己,以防別人發現這種情況。

我結束了使用PSEXEC和NET SHARE的極其unsexy答案會:

// Retrieve drive path from AD 
char[] delim = { '\\' }; 
string[] drivePath = userAD.HomeDirectory.Split(delim); 

// Configure startup properties of process 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.CreateNoWindow = true; 
startInfo.FileName = "C:\\Windows\\System32\\psexec.exe"; 

// Build arguments for folder on alpha or student 
startInfo.Arguments = "\\\\" + serverName + " -s net share " + shareName + "=" folderPath + "$ /GRANT:\"authenticated users\",full"; 

Process process = new Process(); 

process.StartInfo = startInfo; 
process.Start(); 
process.WaitForExit(); 

注意,在我們的環境中的程序就已經被誰擁有作爲文件夾的完全控制權限的用戶下運行共享。要允許類似於非特權用戶,您必須在startInfo.Arguments中指定名稱和密碼。