2009-10-02 81 views
1

我正在編寫一個ASP.NET(C#)應用程序來爲我的域創建用戶。它還必須在單獨的文件服務器上創建文件夾和共享。我迄今已經能夠使用使用DirectoryEntry創建文件夾

  • System.IO.Directory.CreateDirectory創建的文件夾來完成我的任務,
  • 一個(「WINNT://文件服務器/ lanmanserver」)的DirectoryEntry創建的股份。

不幸的是,我的ASP.NET應用程序必須使用模擬運行來創建文件夾。我不喜歡那樣。我想知道是否有辦法使用DirectoryEntry對象在文件服務器上創建文件夾,因爲我可以將所需的憑據傳遞給它的構造函數。或者,有沒有辦法將憑據傳遞給Directory.CreateDirectory?

在此先感謝。 下面是當前的代碼,以防萬一

strPath = "\\myServer\D$\newDir"; 
Directory.CreateDirectory(strPath); 

using (DirectoryEntry deFS = new DirectoryEntry("WinNT://myServer/lanmanserver")) 
{ 
    using (DirectoryEntry deSH = deFS.Children.Add("newDir$", "fileshare")) 
    { 
     deSH.Properties["path"].Value = "D:\\newDir"; 
     deSH.Properties["description"].Value = "My Stackoverflow sample share"; 
     deSH.CommitChanges(); 
    } 
} 

回答

0

我不認爲你應該爲此目的使用DirectoryObject,它不是爲這樣的訪問做出的。但這裏有一個你可以用來使模擬更容易的技巧。創建一個模仿類,它會實現IDisposable,這樣的事情:

public class Impersonator : IDisposable 
{ 
    public Impersonator(userid, password) 
    { 
     ... LogonUserEx(); 
     ... DuplicateToken(); 
     ... Impersonate(); 
    } 
    public void Dispose() 
    { 
     ... RevertToSelf(); 
    } 
} 

那麼你就能夠做到這一點:

using(new Impersonator("myaccount", "password")) 
{ 
    ... do stuff that requires impersonation 
} 
+0

非常感謝您創建一個文件夾。這個解決方案將爲我服務。 看起來我有一些閱讀模仿的細節。 – birukw 2009-10-02 16:15:31

0

據我知道你有兩種選擇:模擬一個具有權限來創建遠程共享目錄或給予的權限設置爲默認用戶,用戶是運行asp.net服務。

那有什麼問題?您正在訪問網絡上的非默認資源,並且默認權限不允許您這樣做。這幾乎就像試圖在網絡共享上寫入的常規用戶帳戶。

+0

我並不精通於asp.net編程,但我認爲有一個特權帳戶運行asp.net進程打開我的系統可能的攻擊,我不希望出現這種情況。如果我只有在需要時才能「享有特權」,它會喜歡它。或者我誤解了整件事情? – birukw 2009-10-02 15:42:21

+0

我也很好奇,因爲我找不到有關使用WinNT提供程序與System.DirectoryServices足夠的文檔。從邏輯上講,使用 – birukw 2009-10-02 15:44:47

0

的的DirectoryEntry類有一個構造函數,需要用戶名和密碼輸入。你試過這個嗎?

See documentation at Microsoft

+0

yes ofcourse。這正是整個線程的原因 – birukw 2009-10-13 10:06:54