在x64上使用WMI创建SQL Server别名

时间:2010-08-16 00:32:15

标签: c# sql-server wmi system.management

我有一个小应用程序,可以自动为某些服务器创建必要的SQL Server别名条目。大部分代码如下所示:

        private static void SetAlias(string aliasName, string server, string protocol, int? port)
        {
            var scope = new ManagementScope(@"\\.\root\Microsoft\SqlServer\ComputerManagement10");
            try
            {
                scope.Connect();

            }
            catch
            {
                scope = new ManagementScope(@"\\.\root\Microsoft\SqlServer\ComputerManagement");
            }
            var clientAlias = new ManagementClass(scope, new ManagementPath("SqlServerAlias"), null);
            clientAlias.Get();

            foreach (ManagementObject existingAlias in clientAlias.GetInstances())
            {
                existingAlias.Get();
                if (String.Equals((String)existingAlias.GetPropertyValue("AliasName"), aliasName))
                {
                    UpdateAlias(existingAlias, aliasName, server, protocol, port);
                    return;
                }
            }

            // create new
            ManagementObject newAlias = clientAlias.CreateInstance();
            UpdateAlias(newAlias, aliasName, server, protocol, port);
            newAlias.Put();
        }

        private static void UpdateAlias(ManagementObject alias, string aliasName, string server, string protocol, int? port)
        {
            alias.SetPropertyValue("AliasName", aliasName);
            alias.SetPropertyValue("ServerName", server);
            alias.SetPropertyValue("ProtocolName", protocol);
            alias.SetPropertyValue("ConnectionString", port != null ? port.ToString() : string.Empty);
        }

这正确地在32位操作系统上创建了我想要的条目,但是在x64操作系统上我需要将别名添加到64位SQL Server客户端配置中。

任何想法如何做到这一点?

感谢。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

当我上次查看此内容时,客户端别名只是持久存储在注册表中(HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer \ Client \ ConnectTo),因此最简单的路由是写入WoW(HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node)在x64上运行时,\ Microsoft \ MSSQLServer \ Client \ ConnectTo)和“正常”位置。请注意,如果您作为32位进程运行,则需要p / invoke或(如果在.net 4上)在编写64位版本时指定64位视图。