如何知道Windows XP或7中是否安装了MSSql Server?

时间:2012-01-02 03:52:13

标签: c++ sql-server windows mfc

在开始安装MSSQLSERVER之前,我想知道系统中是否已经安装了MSSQLSERVER。这应该在C ++或mfc中以编程方式完成。

如果已经在Windows中安装了MSSQLServer,那么有没有办法获取该服务器的MSSql凭据?

如果是,请解释实现这一目标的方法吗?

更新

我尝试在我的系统中安装sqlserver 2005和sql server 2008,但两台服务器都已安装。我检查了注册表路径,但它包含SOFTWARE\Microsoft\Microsoft SQL Server\90的{​​{1}}和MSSQLServer 2005的{​​{1}}。安装我的MSSQLServer之前如何检查是否安装了任何MSSql Server版本或不?

修改

直到现在,我在c ++中以编程方式安装了SQLSERVER。

我发布了以下代码:

SOFTWARE\Microsoft\Microsoft SQL Server\100

1 个答案:

答案 0 :(得分:1)

  • 除暴力
  • 外,您无法获取服务器的凭据

<强> BUT

如果您是本地管理员 - 您可以使用启动密钥-f从命令行启动sql server并尝试使用它 - 但不能保证,但您可以尝试。

  • 我有一个代码检查sql server实例的一些默认值,因此可以很容易地根据你的需要采用c ++ /

    private void GetSqlDefaultInfo(string ServerName, string InstanceName)
    {
    
        InstanceName = string.IsNullOrEmpty(InstanceName) ? "MSSQLSERVER" : InstanceName;
    
        if (string.IsNullOrEmpty(ServerName))
            ServerName = Environment.MachineName;
        using (var registryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ServerName))
        {
            object sqlInstance;
            using (var subKey = registryKey.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"))
                sqlInstance = subKey.GetValue(InstanceName);
            if (sqlInstance != null && !string.IsNullOrEmpty(sqlInstance.ToString()))
            {
                var sqlPathKey = string.Format(@"SOFTWARE\Microsoft\Microsoft SQL Server\{0}\MSSQLServer",
                                               sqlInstance);
                object defaultData, defaultLog, backupDirectory, sqlPath;
                using (var subKey = registryKey.OpenSubKey(sqlPathKey))
                {
                    defaultData = subKey.GetValue("DefaultData");
                    defaultLog = subKey.GetValue("DefaultLog");
                    backupDirectory = subKey.GetValue("BackupDirectory");
                }
                sqlPathKey = string.Format(@"SOFTWARE\Microsoft\Microsoft SQL Server\{0}\Setup", sqlInstance);
    
                using (var subKey = registryKey.OpenSubKey(sqlPathKey))
                    sqlPath = subKey.GetValue("SQLDataRoot");
                DataFilePath = defaultData != null
                                   ? defaultData.ToString()
                                   : Path.Combine(sqlPath.ToString(), "Data").TrimEnd('\\');
    
                LogFilePath = defaultLog != null
                                  ? defaultLog.ToString()
                                  : Path.Combine(sqlPath.ToString(), "Data").TrimEnd('\\');
                FTSIndexFilePath = DataFilePath;
                ContentFilePath = DataFilePath;
                BackupFilePath = backupDirectory != null
                                     ? backupDirectory.ToString()
                                     : Path.Combine(sqlPath.ToString(), "Backup").TrimEnd('\\');
            }
        }
    }