Avatar billede spif2001 Nybegynder
22. september 2008 - 10:42 Der er 5 kommentarer og
1 løsning

Detektere en MS SQL Server 2008 (Express) installation

Hej

Først og fremmest skal jeg lige advare om, at jeg ikke er nogen SQL haj, nærmere en SQL neonfisk.

Jeg er ved at lave et InnoSetup installer hierarki, og som en del af det har jeg lavet et modul til automatisk download og/eller installation af diverse Microsoft komponenter - .NET Framework, Windows Installer, Internet Explorer, MDAC etc.

For at finde ud af, om de forskellige komponenter allerede forefindes på maskinen, bruger jeg som regel registrerings nøgler, men da jeg legede med MS SQL Server 2005 Express fandt jeg ud af, at registrerings nøgler ikke var en særlig god måde at tjekke det på. I stedet lavede jeg et Ole objekt på følgende måde:

[CODE]
function SQLServerExpress2005Exist(): Boolean;
begin 
  Result := True;
  try
    SQLServer := CreateOleObject('SQLDMO.SQLServer');
  except
    if MsgBox(CustomMessage('SQLServerExpress2005Msg'), mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then Result := False;
  end;
end;
[/CODE]

Denne metode virker fint, når jeg prøver at finde en MS SQL Server 2005, men når jeg prøver at bruge den samme metode til at finde en kørende MS SQL SERVER 2008 Express, så virker det ikke. Jeg ryger ind i 'except' blokken.

Hvad er den bedste måde at detektere en installeret (ikke nødvendigvis kørende) MS SQL Server 2008 på?
Avatar billede arne_v Ekspert
22. september 2008 - 22:53 #1
Hvad er der galt med at kigge i registry ?
Avatar billede spif2001 Nybegynder
23. september 2008 - 08:18 #2
Det der er(var) galt med registry mht. 2005 serveren, er at når jeg afinstallerede den, så blev registrerings nøglerne ikke slettet. Derved blev min auto-installer af SQL server sat ud af kraft, når man ville gen-installere mit program. Mit program bliver installeret, men ingen SQL server og så er fanden løs, da det tit og ofte er alt andet en superbrugere, der benytter sig af mit program.

Spørg mig ikke om hvilke nøgler jeg tjekkede på, da det er lang tid siden jeg lavede 2005 udgaven og derfor ikke kan huske det (og ikke har skrevet det ned - torsk). Løsningen dengang blev som ovenfor en test af om et Ole objekt kunne oprettes. Hvis ja, så er der en server.

Jeg vil dog meget hellere benytte mig af registrerings nøgler, så hvis du ved hvilke jeg kan være sikre på bliver fjernet ved en afinstallation af henholdsvis server 2005 og server 2008, så fortæl det endelig og du skal fluks få mine point. :)
Avatar billede spif2001 Nybegynder
23. september 2008 - 10:01 #3
Nu har jeg lige leget lidt registry'en igen, og forsøgt mig med følgende nøgle for SQL Server 2008:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100

Samme historie - nøglen forsvinder ikke når jeg afinstallerer serveren igen. Not good..
Avatar billede isl19960 Nybegynder
23. september 2008 - 10:17 #4
Kunne det tænkes at du kunne bruge følgende:

http://blogs.msdn.com/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx

Er ikke lige selv en haj til WMI, men måske de medfølgende eksempler kan hjælpe dig videre...
Avatar billede spif2001 Nybegynder
23. september 2008 - 10:29 #5
@isl19960

Den har jeg også set, men for det første er jeg ikke inde i WMI og for det andet skal det kodes i Pascal, da InnoSetup's kode del skrives i Pascal. Jeg har efterhånden lavet en del i Pascal i InnoSetup, men slet ikke noget så kompliseret som WMI.

Forfatteren til bloggen siger dog også at registry tjek er en dårlig idé, men hans argument er så, at man ikke kan være sikker på at nøglerne ikke ændrer sig fra version til version. Lige det punkt er jeg ikke så bange for, da jeg kun tjekker efter en bestemt version - eksempelvis 2008. Hvis der så eksisterer en 2005 server i forvejen, er det for mig ligegyldigt. Så længe jeg ikke finder en 2008 server, installerer jeg en 2008 server.
Avatar billede spif2001 Nybegynder
09. februar 2009 - 15:45 #6
Lukker.

Endte med at bruge registry. Hvis brugeren får afinstalleret SQL Serveren 'forkert', så må han selv og/eller vores support linie hjælpe brugeren med at få installeret SQL 2008 Server manuelt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester