2010-09-03 46 views

回答

2

我用WMI来做到这一点,在网上找到了一个例子,这就是它的样子。

private ManagementScope _session = null; 

    public ManagementPath CreateCNameRecord(string DnsServerName, string ContainerName, string OwnerName, string PrimaryName) 
    { 
     _session = new ManagementScope("\\\\" + DnsServerName+ "\\root\\MicrosoftDNS", con); 
     _session.Connect(); 

     ManagementClass zoneObj = new ManagementClass(_session, new ManagementPath("MicrosoftDNS_CNAMEType"), null); 
     ManagementBaseObject inParams = zoneObj.GetMethodParameters("CreateInstanceFromPropertyData"); 
     inParams["DnsServerName"] = ((System.String)(DnsServerName)); 
     inParams["ContainerName"] = ((System.String)(ContainerName)); 
     inParams["OwnerName"] = ((System.String)(OwnerName)); 
     inParams["PrimaryName"] = ((System.String)(PrimaryName)); 
     ManagementBaseObject outParams = zoneObj.InvokeMethod("CreateInstanceFromPropertyData", inParams, null); 

     if ((outParams.Properties["RR"] != null)) 
     { 
      return new ManagementPath(outParams["RR"].ToString()); 
     } 

     return null; 
    } 
0

我不认为.NET有任何东西可以提供对这些的访问(我可以在一些快速搜索中找到对专有库,控件等的引用),因此您可能必须使用Win32 API通过P/Invoke(尽管另一种可能性是通过WMI来完成这项工作)。

你会先DnsAcquireContextHandle开始,然后(可能)DnsQuery得到一个当前记录集,修改其内容并加入新的别名,DnsReplaceRecordSet有DNS服务器使用新的记录集,最后DnsReleaseContextHandle关闭事情下降。

当然,您需要在服务器上拥有正确的权限,否则这些权限都不起作用。