22. september 2008 - 10:42Der 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å?
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. :)
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.
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.
Synes godt om
Ny brugerNybegynder
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.