Как узнать, установлен MSSql Server или нет в Windows XP или 7? - PullRequest
0 голосов
/ 02 января 2012

Прежде чем приступить к установке MSSQLSERVER, я хочу узнать, установлен ли MSSQLSERVER в системе или нет. Это должно быть сделано программно в C ++ или MFC.

Если MSSQLServer уже установлен в Windows, тогда есть ли какой-нибудь возможный способ получить учетные данные MSSql этого сервера?

Если да, пожалуйста, объясните, как этого добиться?

UPDATE

Я попытался установить sqlserver 2005 и sql server 2008 в моей системе, но оба сервера установлены. Я проверил путь к реестру, но он содержит SOFTWARE\Microsoft\Microsoft SQL Server\90 для MSSQLServer 2005 и SOFTWARE\Microsoft\Microsoft SQL Server\100 для MSSqlServer 2008. Перед установкой моего MSSQLServer Как я могу проверить, установлена ​​ли какая-либо из версий сервера MSSql или нет?

EDIT

До сих пор я молча устанавливал SQLSERVER программно на c ++.

я выложил код ниже:

SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = L"D:\\Softies\\SQLEXPR.EXE";
ShExecInfo.lpParameters = L"/qn addlocal=all InstanceName=SQLEXPRESS DisableNetworkProtocols=0 SECURITYMODE=SQL SAPWD=root SQLAUTOSTART=1 SQLBROWSERAUTOSTART=1 ENABLERANU=0";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);

int nResult=0;
nResult = (int )ShExecInfo.hInstApp;
if( nResult >32) 
cout<<"EXE executed successfully"<<endl;
else
cout<<"Reason for failure is" <<nResult<<endl;
return 0;

1 Ответ

1 голос
/ 02 января 2012
  • Вы не можете получить учетные данные сервера, кроме перебора

НО

Если вы являетесь локальным администратором - вы можете запуститьSQL Server из командной строки с ключом запуска -f и попробуйте поиграть с ним - это не гарантировано, но вы можете попробовать.

  • У меня есть код, который проверяет некоторые значения по умолчанию дляэкземпляр сервера SQL, так что он может быть легко адаптирован к вашим потребностям и 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('\\');
            }
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...