2012-01-02 67 views
0

在安裝MSSQLSERVER之前,我想知道MSSQLSERVER是否已經安裝在系統中。這應該在C++或mfc中以編程方式完成。如何知道MSSql Server是否安裝在Windows XP或7中?

如果是的MSSQLServer已經安裝在Windows下,那麼是否有任何可能的方式來獲得該服務器的MSSQL證書?

如果是這樣,請說明實現這一目標的方法是什麼?

UPDATE

我試圖安裝SQLSERVER 2005和SQL Server 2008在我的系統,但同時安裝的服務器。我查了註冊表路徑,但它包含了SOFTWARE\Microsoft\Microsoft SQL Server\90MSSQLServer 2005SOFTWARE\Microsoft\Microsoft SQL Server\100MSSqlServer 2008。之前我安裝我的MSSQLServer如何檢查是否有任何的MSSQL Server版本安裝或沒有?

編輯

到現在我無語安裝在c編程的SQLSERVER ++。

我貼下面的代碼:

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
  • 無法獲取服務器的證書,除了蠻力

如果你是本地管理員 - 你可以使用啓動鍵-f從命令行啓動sql server並嘗試使用它 - 不能保證,bu你可以試試。

  • 我有檢查一些默認的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('\\'); 
         } 
        } 
    } 
    
+0

@奧列格:我試圖安裝SQLSERVER 2005和sql server 2008在我的系統中,但兩臺服務器都已安裝。我查了註冊表路徑,但它包含SOFTWARE \微軟\ Microsoft SQL Server的\ 90 SQLServer的2005年和SOFTWARE \微軟\ Microsoft SQL Server的\ 100 SqlServer的2008.How我可以檢查是否有任何的SQL Server版本安裝或沒有? – karthik 2012-01-02 07:23:42

+0

@ Oleg:看清楚,檢查我的問題中的更新部分。 – karthik 2012-01-02 07:27:13

+0

@karthik你不需要檢查90或100(這些版本,而不是實例) - 你需要檢查MSSQLSERVER(或MSSQL10_50.MSSQLSERVER - 取決於版本) - 爲默認實例,或爲實例名\實例的實例。如果您設置SQLEXPRESS實例,那麼檢查的註冊表鍵是SOFTWARE \ Microsoft \ Microsoft SQL Server \ SQLEXPRESS。 – 2012-01-02 07:28:44