Het onderstaande probleem is een voorbeeld van iets dat ik een keer *niet* via Google kon oplossen. Kennelijk is het probleem té specifiek voor Nederlandse gebruikers. Dus laat ik dan maar zelf de gevonden oplossing hier plaatsen, wie weet help ik er ooit nog iemand anders mee.
Probleem/uitdaging was het installeren van SQL Server Express (de gratis databasetoepassing van Microsoft) via een lokaal geladen HTA-pagina (kan ook HTML zijn). Als je een 'met 1 druk op de knop' installatie wilt maken, moet je onder meer het Windows account meegeven waaronder SQL Server Express moet gaan draaien. Dit moest het zgn. LocalSystem account zijn. En de eerste grap (ahum) van Microsoft is al dat ze die soms wel, en soms niet hebben vertaald. Bijvoorbeeld:
In een Engelse versie van Windows heet het account: NT AUTHORITY\SYSTEM
In een Duitse versie van Windows heet het account: NT-AUTORITÄT\SYSTEM
In een Franse versie van Windows heet het account: AUTORITE NT\SYSTEM
In het Spaans, Italiaans, Russisch, Chinees en Japans het het account: NT AUTHORITY\SYSTEM (dus hetzelfde als op een Engelse versie van Windows)
En op een Nederlandse versie? Ja, nu wordt ie pas echt leuk:
Op een Nederlandse Windows XP machine heet het account: NT AUTHORITY\SYSTEM
Op een Nederlandse Windows Vista machine heet het account: NT AUTHORITY\SYSTEEM (dus met 2 E's)
Op een Nederlandse Windows 7 machine heet het account: NT AUTHORITY\SYSTEM (weer met 1 E)
Kortom: het is één grote puinhoop!
Je ontkomt er niet aan om de naam van het LocalSystem account uit te lezen, en de gevonden naam in de installatie-opdracht te gebruiken.
In de 'head' van het HTA/HTML bestand heb ik daarvoor het volgende vbscript geplaatst:
<script type="text/vbscript">
Sub InstallSQL (ByVal sLang)
Dim LocalSystem
Dim InstallString
Dim SQLFileName
Dim Answer
Set objWMI = GetObject("winmgmts:rootcimv2")
Set objSid = objWMI.Get("Win32_SID.SID='S-1-5-18'")
Set shell = CreateObject("WScript.Shell")
LocalSystem = objSid.ReferencedDomainName & "" & objSid.AccountName
Select Case sLang
Case "NL"
SQLFileName = "SQLEXPR_NLA.EXE"
Case "EN"
SQLFileName = "SQLEXPR.EXE"
End Select
InstallString = Chr(34) & ".SQL Server 2005 Express" & SQLFileName & Chr(34) & " /qb /qb ADDLOCAL=ALL INSTANCENAME=WIHE SQLBROWSERACCOUNT=" & Chr(34) & LocalSystem & Chr(34) & " SQLBROWSERAUTOSTART=1 SQLACCOUNT=" & Chr(34) & LocalSystem & Chr(34) & " SQLAUTOSTART=1 ERRORREPORTING=0 SQMREPORTING=0 ENABLERANU=1 ADDUSERASADMI=1"
shell.Run InstallString, 1, true
Answer = MsgBox ("De installatie van SQL Server Express is voltooid!",vbInformation,"Setup")
Set shell = Nothing
Set objSid = Nothing
Set objWMI = Nothing
End Sub
</script>
En in de 'body' staat een knop:
<input style="width:100px; height:25px; margin-left:30px" type="Button" value="Installeren" onClick="InstallSQL('NL')"/>
<input style="width:100px; height:25px; margin-left:30px" type="Button" value="Installeren" onClick="InstallSQL('EN')"/>
NB De taal ('NL' of 'EN') slaat hier op de taal van de SQL Server Express programma bestanden, en heeft dus niets met het LocalSystem account te maken. Dit is dus nog een extraatje om de gebruiker te laten kiezen (dus als iemand per se de Engelse SQL Server Express programma bestanden wil gebruiken op een Nederlandse versie van Windows, dan kan dat ook).
Gaanmetdiebanaan!