C# 正在将thumbnailPhoto属性写入Active Directory

C# 正在将thumbnailPhoto属性写入Active Directory,c#,active-directory,C#,Active Directory,我正在创建一个应用程序(.Net 3.5),允许用户在Active Directory中更新自己的照片和电话号码 我使用的是UserPrincipal类,我使用这个 我得到字节数组并用 pictureBoxthumbnail.Image = Image.FromStream(new MemoryStream(userPrincipal.thumbnailPhoto)); 这张表上的图片,到目前为止还不错。当我尝试将映像写入Active Directory时,我将pictureBox转换为字节数

我正在创建一个应用程序(.Net 3.5),允许用户在Active Directory中更新自己的照片和电话号码

我使用的是UserPrincipal类,我使用这个

我得到字节数组并用

pictureBoxthumbnail.Image = Image.FromStream(new MemoryStream(userPrincipal.thumbnailPhoto));
这张表上的图片,到目前为止还不错。当我尝试将映像写入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未处理

消息=未指定的错误

Source=System.DirectoryServices.AccountManagement

错误代码=-2147467259

我怀疑我的pictureBox到字节数组是错误的。有人能帮忙吗


谢谢。

我今天通过使用下面的功能实现了这一点。希望这能帮助其他人

    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();
    }

-2147467259=
0x80004005
=访问被拒绝-确定您有权设置该属性?我可以清除缩略图。使用ADPhotoEdit作为我自己,我可以上传一张新照片。可能是权限问题。我不认为这是权限问题。我想让你调试它,并确保,让我们知道你是哪一行得到这个错误。我之前编写过相同类型的应用程序,在尝试将代码包含在using for MemoryStream中时收到了错误代码。当信息保存到AD时会发生这种情况。在我为userPrincipal.thumbnailPhoto设置新值后,我会调用userPrincipal.Save(),这就是发生异常的时候。
    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();
    }