none
用.net新建域帐户,在设置UAC属性的时候居然被告知"该服务器不愿意处理该请求".. RRS feed

  • 问题

  • 代码如下
            public void AddUser(string Username, string ChineseName, string MailAddress)  
            {
                try
                {
                    DirectoryEntry myDE = new DirectoryEntry("LDAP://testserver/OU=testUsers,DC=test,DC=com", "admin", "123456");
                    DirectoryEntry myDirectoryEntry = myDE.Children.Add("CN=" + Username, "User");
                    myDirectoryEntry.Properties["userPrincipalName"].Value = Username+"@test.com";
                   myDirectoryEntry.Properties["displayName"].Value = ChineseName;
                    myDirectoryEntry.Properties["samAccountName"].Value = Username;
                    myDirectoryEntry.Properties["Mail"].Value = MailAddress;
                    myDirectoryEntry.Properties["UserPassword"].Value = "121314";
                    myDirectoryEntry.CommitChanges();
                    //MessageBox.Show(myDirectoryEntry.Properties["userAccountControl"].Value.ToString());
                    myDirectoryEntry.Properties["userAccountControl"].Value = 66048;  //就在执行这一句话的时候出错了....帐户都已经新建成功了
                    myDirectoryEntry.CommitChanges();
                    myDirectoryEntry.Close();
                    myDE.Close();
                }
                catch (Exception RaiseErr)
                {
                    MessageBox.Show(RaiseErr.Message);
                }
            }

    myDirectoryEntry.Properties["userAccountControl"].Value = 66048; 执行这句话的时候出错,前面的命令没错,帐户也新建成功了

    我查看了一下新建的账户UAC值是  546 (512+32+2)


    我也google搜索了一下网上一个文章,说解决方法就是这段代码:

    int val = (int) usr.Properties["userAccountControl"].Value;
    usr.Properties["userAccountControl"].Value = val & ~ADS_UF_ACCOUNTDISABLE;


    我运行了一下,在 int val = (int) usr.Properties["userAccountControl"].Value; 这句话的时候提示我 未将对象引用设置到对象的实例



    请问高手怎样才能修改这个uac啊...
    2009年10月10日 8:58

答案

  • 我找到原因了,原来是我那句 myDirectoryEntry.Properties["UserPassword"].Value = "121314"; 根本没起作用
    新建的账户是空密码,所以系统无法将它启用
    我把代码改了一下就好了


    myDirectoryEntry.Properties["Mail"].Value = MailAddress;
                    myDirectoryEntry.CommitChanges();
                    myDirectoryEntry.Invoke("SetPassword", new Object[] { "121314" });
                 //   myDirectoryEntry.Properties["UserPassword"].Value = "121314";
                    myDirectoryEntry.Properties["userAccountControl"].Value = 66048;
                    myDirectoryEntry.CommitChanges();
     
    • 已标记为答案 planevina 2009年10月10日 14:36
    2009年10月10日 14:36

全部回复

  • 补充说明: 多次测试之后,发现只要想启用这个帐户 ,就会出这个错误 设置其他uac属性例如用户密码永不过期(66050=65536+512+2)、普通用户(514=512+2),这些都没问题 是不是我域控制器的哪个策略有什么问题?
    2009年10月10日 10:11
  • 没人知道嘛.....
    2009年10月10日 14:20
  • 我找到原因了,原来是我那句 myDirectoryEntry.Properties["UserPassword"].Value = "121314"; 根本没起作用
    新建的账户是空密码,所以系统无法将它启用
    我把代码改了一下就好了


    myDirectoryEntry.Properties["Mail"].Value = MailAddress;
                    myDirectoryEntry.CommitChanges();
                    myDirectoryEntry.Invoke("SetPassword", new Object[] { "121314" });
                 //   myDirectoryEntry.Properties["UserPassword"].Value = "121314";
                    myDirectoryEntry.Properties["userAccountControl"].Value = 66048;
                    myDirectoryEntry.CommitChanges();
     
    • 已标记为答案 planevina 2009年10月10日 14:36
    2009年10月10日 14:36