2010-03-14 8 views
6

Je fais une application qui est une interface utilisateur pour accéder à 2 types de bases de données - SQLite et SQL Server. Le fait est que SQLite n'a pas besoin d'être "installé" puisque c'est juste une base de données flatfile, mais d'autre part, SQL Server (Express/normal) doit être installé avant utilisation. Ma question est simple:Vérifiez si SQL Server est installé sur une machine à travers C#

Y at-il un moyen par lequel je peux savoir si une instance de SQL Server a été installée sur la machine locale en utilisant un programme C#?

+1

Même question: http: // stackoverflow .com/questions/2381055/check-if-sql-serveur-any-version-is-installed –

+0

oh désolé. Merci ! – Shrayas

Répondre

8

Si votre application est installée sur la machine en question, vous pouvez inspecter le registre en utilisant quelque chose de semblable à ceci:

using Microsoft.Win32; 
RegistryKey RK = Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Microsoft SQL Server"); 
    if(RK != null) 
    { 
     // It's there 
    } 
    else 
    { 
     // It's not there 
    } 
+0

semble bon, ajoutez juste un @ au début de votre paramètre OpenSubKey pour permettre les barres obliques inverses;) merci pour la réponse! – JM1990

14

Vous avez plusieurs façons de le faire:

  • SmoApplication.EnumAvailableSqlServers()
  • SqlDataSourceEnumerator.Instance
  • accès direct au système reg istry

L'accès direct n'est pas la solution recommandée par MS, car ils peuvent modifier les clés/chemins. Mais les autres solutions ne sont pas robustes et échouent en fournissant des instances sur des plates-formes 64 bits.

Par conséquent, je préfère vérifier les instances SQL Server dans le registre système. En faisant cela, gardez à l'esprit la différence dans l'accès au Registre entre x86 et x64 plates-formes. Windows 64 bits stocke des données dans différentes parties du registre système et les combine en vues. Donc, en utilisant RegistryView est essentiel.

using Microsoft.Win32; 

RegistryView registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32; 
using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) 
{ 
    RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false); 
    if (instanceKey != null) 
    { 
     foreach (var instanceName in instanceKey.GetValueNames()) 
     { 
      Console.WriteLine(Environment.MachineName + @"\" + instanceName); 
     } 
    } 
} 

Si vous recherchez des instances 32 bits sur un système d'exploitation 64 bits (assez bizarre, mais possible), vous aurez besoin de regarder:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server 
Questions connexes