2016-01-20 124 views
0

我正在創建一個應用程序(.Net 3.5),以允許用戶在Active Directory中更新其自己的照片和電話號碼。將thumbnailPhoto屬性寫入Active Directory

我使用UserPrincipal類,我已經使用這個example

// Create the "thumbnailPhoto" property.  
    [DirectoryProperty("thumbnailPhoto")] 
    public byte[] thumbnailPhoto 
    { 
     get 
     { 
      if (ExtensionGet("thumbnailPhoto").Length != 1) 
       return null; 

      return (byte[])ExtensionGet("thumbnailPhoto")[0]; 
     } 
     set 
     { 
      ExtensionSet("thumbnailPhoto", value); 
     } 
    } 

我得到的字節數組,並將其與

pictureBoxthumbnail.Image = Image.FromStream(new MemoryStream(userPrincipal.thumbnailPhoto)); 

寫一個PictureBox延長這顯示圖片,形式上,迄今爲止非常好。當我嘗試寫圖像到Active Directory,我在PictureBox轉換爲字節數組

userPrincipal.thumbnailPhoto = ImageManipulation.imageToByteArray(pictureBoxthumbnail.Image); 

public static byte[] imageToByteArray(System.Drawing.Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
    return ms.ToArray(); 
} 

和嘗試,並保存數據,但我得到了以下異常。

System.DirectoryServices.AccountManagement.PrincipalOperationException了未處理

消息=未指定的錯誤

源= System.DirectoryServices.AccountManagement

錯誤碼= -2147467259

我懷疑我的pictureBox到字節數組是錯誤的。有人能夠幫助嗎?

謝謝。

+1

-2147467259 ='0x80004005' =訪問被拒絕 - 確定您有權設置該屬性? –

+0

我可以清除縮略圖。使用ADPhotoEdit作爲我自己,我可以上傳一張新照片。可能是一個權限問題,但。 – Beresford

+0

我不認爲這是許可問題。我希望你調試它,並確保讓我們知道你得到這個錯誤的哪一行。我曾經寫過相同類型的應用程序,並且在嘗試將**用於* MemoryStream *時將代碼放在**中時得到了非常錯誤的代碼。 –

回答

0

我設法使用下面的功能今天工作。希望這可以幫助別人。

private void UpdatePhoto() 
    { 
     var principalContext = new PrincipalContext(ContextType.Domain); 
     var userPrincipal = UserPrincipalEx.FindByIdentity(principalContext, System.Environment.UserName); 

     DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}:389/{1}", principalContext.ConnectedServer, userPrincipal.DistinguishedName)); 
     directoryEntry.Properties["thumbnailPhoto"].Value = ImageManipulation.imageToByteArray(pictureBoxthumbnail.Image); 
     directoryEntry.CommitChanges(); 
    }