【问题标题】:C# How to get SQL Server installation path programatically?C# 如何以编程方式获取 SQL Server 安装路径?
【发布时间】:2009-07-22 14:14:24
【问题描述】:

如何获取给定 SQL Server 实例(默认和名称实例)的安装路径

【问题讨论】:

  • 你想用这个完成什么?根据你的需要,安装路径可能不够用。
  • 其实我需要exe的完整路径。
  • 哪个EXE?有几个,你需要它做什么?同样,根据您的原因,可能有更好的方法。
  • 这里有一个类似的 C++ 问题stackoverflow.com/questions/1204920/…

标签: c# sql-server


【解决方案1】:
using(RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"))
{
    foreach (string subKeyName in sqlServerKey.GetSubKeyNames())
    {
        if(subKeyName.StartsWith("MSSQL."))
        {
            using(RegistryKey instanceKey = sqlServerKey.OpenSubKey(subKeyName))
            {
                string instanceName = instanceKey.GetValue("").ToString();

                if (instanceName == "MSSQLSERVER")//say
                {
                    string path = instanceKey.OpenSubKey(@"Setup").GetValue("SQLBinRoot").ToString();
                    path = Path.Combine(path, "sqlserver.exe");
                    return path;
                }
            }
        }
    }
}

【讨论】:

  • 当然,这取决于 SQL Server 选择使用注册表项的方式,并且一旦更改就会中断。我相信你会承认微软有权更改自己的注册表项?这就是为什么我问你你想要完成什么。可能有一种方法不会因发布而中断。
  • 如果您在 64 位操作系统上寻找 32 位实例(很奇怪,但可能),您需要查看:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server跨度>
【解决方案2】:

如果你有连接字符串,你可以用 SQL 选择目录

private string ServerRootDirectory(string connString)
    {
        string path = string.Empty;
        using (SqlConnection con = new SqlConnection(connString))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = string.Format(@"DECLARE @InstanceName varchar(100), 
                                                        @InstanceLocation varchar(100),
                                                        @InstancePath varchar(100)

                                                SELECT @InstanceName = convert(varchar, ServerProperty('InstanceName'))
                                                EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                                                    @key='Software\Microsoft\Microsoft SQL Server\Instance Names\SQL',
                                                    @value_name=@InstanceName,
                                                    @value=@InstanceLocation OUTPUT
                                                SELECT @InstanceLocation = 'Software\Microsoft\Microsoft SQL Server\'+@InstanceLocation+'\Setup'

                                                EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                                                    @key=@InstanceLocation,
                                                    @value_name='SQLPath',
                                                    @value=@InstancePath OUTPUT
                                                SELECT @InstancePath as RootDirectoryPath");
            path = (string)cmd.ExecuteScalar();
            con.Close();
        }
        return path;
    }

以上代码的输出:

c:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多