2009-09-25 47 views
5

我有一個工具,我用它來編程創建本地用戶帳戶如下:LoadUserProfile不創建本地用戶配置文件,當它不存在[C#]

DirectoryEntry NewUser = dirEntryLocalMachine.Children.Add("UserName", "user"); 
NewUser.Invoke("SetPassword", new object[] { "Passsord" }); 
NewUser.Invoke("Put", new object[] { "Description", "Description" }); 
NewUser.CommitChanges(); 

的帳戶創建好的,但在此時用戶配置文件不存在(沒有HKEY當前用戶,沒有文檔&設置等),我正在做一些研究,並發現以下MSDN文章,稱調用LoadUserProfile(...)實際上會創建配置文件如果它不存在:
How To Programmatically Cause the Creation of a User's Profile

所以我添加的代碼如下:

IntPtr hToken = IntPtr.Zero; 
bool bLogon = LogonUser(
     sName, 
     sDomain, 
     sPassword, 
     LOGON32_LOGON_NETWORK, 
     LOGON32_PROVIDER_DEFAULT, 
     out hToken 
     ); 

PROFILEINFO profileInfo = new PROFILEINFO();  
profileInfo.dwSize = Marshal.SizeOf(profileInfo); 
profileInfo.dwFlags = 1; 
profileInfo.lpUserName = sName; 
bool bLoad = LoadUserProfile(hToken, ref profileInfo); 

現在,無論bLogon和BLOAD是真實的,沒有出現異常,一切「似乎」,以做工精細... 不更新profileInfo的內容(我會假設領域像.lpProfilePath應該有很好的價值)和GetUserProfileDirectory()無法找到路徑(顯然 - 它不存在) - 我也手動檢查,並沒有什麼在「帳戶&設置」下的新帳戶。

任何人有任何線索,我做錯了什麼?

任何幫助將不勝感激。 謝謝,

+0

你確定你在管理員管理下運行該程序嗎? – 2009-09-26 15:51:05

回答

0

我假設這全部都是在管理員的幫助下完成的 - 實際上它是一個以LocalSystem身份執行任務的服務 - 它沒有完整的管理權限嗎?如果我缺乏priveleges我想我會得到某種錯誤代碼。

我也嘗試運行這個作爲管理員本身(以交互式用戶登錄),認爲它可能與服務等有關......但同樣的結果 - 沒有錯誤,但沒有創建配置文件。

0

我有同樣的問題。我以管理員身份運行,然後模擬爲新創建的非管理員,並且由於權限不足而無法LoadUserProfile。如果您在調用LoadUserProfile後調用Marshal.GetLastWin32Error(),則會出現錯誤1314:客戶端不具有所需的特權。

相關問題