2012-01-25 51 views
3

概括地說,我想要做的就是創建一個新用戶,其登錄的能力。創建編程Windows用戶C#.NET(使用PricinpalUser/CreateProfile)

我從採摘代碼各種來源,並試圖簡化它。但是,我遇到了一些絆腳石。

當我打電話UserPrincipal.Save() - 它給了我一個錯誤

與 異常類型的「目錄屬性不能在緩存中找到」 ..「COMExceptioncrossed天然的/管理的邊界」。

由於某些原因,當我直接運行我的程序(而不是通過vs2010)時,它工作正常。所以我可以解決這個問題!

雖然我的主要問題是,即使一切似乎都沒問題,但當我嘗試登錄時,會出現消息「加載桌面」或其它任何內容,然後只是說「註銷」。所以就好像該配置文件沒有正確設置。

來自API'CreateProfile'的返回值不是0,所以可能會導致問題。

還有什麼我需要做的嗎?

我的代碼...

private void Run(string un, string pw) 
{ 
    UserPrincipal NewUP = CreateUser(un, pw); 
    AddGroup(NewUP, "Users"); 
    AddGroup(NewUP, "HomeUsers"); 
    CreateProfile(NewUP); 
} 
private UserPrincipal CreateUser(string Username, string Password) 
{ 
    PrincipalContext pc = new PrincipalContext(ContextType.Machine, Environment.MachineName); 
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, Username); 
    if (up == null) 
    { 
     up = new UserPrincipal(pc, Username, Password, true); 
     up.UserCannotChangePassword = false; 
     up.PasswordNeverExpires = false; 
     up.Save(); // this is where it crashes when I run through the debugger 
    } 
    return up; 
} 
private void AddGroup(UserPrincipal Up, string GroupName) 
{ 
    PrincipalContext pc = new PrincipalContext(ContextType.Machine, Environment.MachineName); 
    GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, GroupName); 
    if (!gp.Members.Contains(Up)) 
    { 
     gp.Members.Add(Up); 
     gp.Save(); 
    } 
    gp.Dispose(); 
} 
private void CreateProfile(UserPrincipal Up) 
{ 
    int MaxPath = 240; 
    StringBuilder pathBuf = new StringBuilder(MaxPath); 
    uint pathLen = (uint)pathBuf.Capacity; 
    int Res = CreateProfile(Up.Sid.ToString(), Up.SamAccountName, pathBuf, pathLen); 
} 
+0

如果你註釋掉'CreateProfile',會發生什麼? –

+0

檢查窗口事件日誌,它很可能會有一個事件,它會給你提示問題是什麼。 – CodingGorilla

+0

createprofile實際上在「用戶」路徑中創建了一個目錄,所以它顯然是在做一些事情。如果我將它註釋掉,創建一個新用戶,然後嘗試登錄,它會出現另一個窗口錯誤(沿着......線無法加載配置文件)這就是我最初做的,這促使我研究創建配置文件。也許這是因爲返回代碼不是0. –

回答

1

奇怪的是,當這是一個服務器的機器(即不是我的開發機)上運行,它工作正常。我有一種感覺,這與Windows 7或我的特定安裝有關。

無論如何感謝您的建議。

相關問題