Ik ben bezig met een nieuwe versie van een installer, gemaakt met INNOSetup.
Voor deze nieuwe versie zijn alleen 'Power User' rechten nodig, niet langer 'Admin' rechten.
We moeten nu dus eerst checken of de gebruiker 'Microsoft Visual C++ 2008 Redistributable' al heeft geinstalleerd, omdat die wel 'Admin' rechten behoeft.
Ik ben hier al lang mee bezig, maar ik kom er niet uit.
Ik check op {9A25302D-30C0-39D9-BD6F-21E6EC160475} met dit stukje code:
Maar ook al heb ik die versie geinstalleerd op mijn pc en is {9A25302D-30C0-39D9-BD6F-21E6EC160475} aanwezig in mijn registry, het resultaat is altijd dat VCRedist niet is geinstalleerd.
Mijn vraag is dan ook hoe kan ik het wel juist detecteren?
Mijn tweede vraag is, als de detectie werkt moet de VC++ installer gestart worden onder een Admin-account. Hoe kan ik het commando 'Run As' uitvoeren en zo het standaard Windows inlogscherm tonen?
[Edit:]
Ik heb wat messageboxen toegevoegd en nog meer gegoogled en nu blijkt dat MsiQueryProductState(ProductId) INSTALLSTATE_INVALIDARG terug geeft.
Maar ik kan niet vinden hoe ik het dan moet doen.
Voor deze nieuwe versie zijn alleen 'Power User' rechten nodig, niet langer 'Admin' rechten.
We moeten nu dus eerst checken of de gebruiker 'Microsoft Visual C++ 2008 Redistributable' al heeft geinstalleerd, omdat die wel 'Admin' rechten behoeft.
Ik ben hier al lang mee bezig, maar ik kom er niet uit.
Ik check op {9A25302D-30C0-39D9-BD6F-21E6EC160475} met dit stukje code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| function MsiQueryProductState(ProductCode: string): integer; external 'MsiQueryProductStateA@msi.dll'; const INSTALLSTATE_DEFAULT = 5; INSTALLLEVEL_MAXIMUM = $ffff; INSTALLSTATE_ABSENT = 2; const VCREDIST_X86 ='{9A25302D-30C0-39D9-BD6F-21E6EC160475}'; function IsMsiProductInstalled(const ProductId: string): boolean; begin Result := MsiQueryProductState(ProductId) = INSTALLSTATE_DEFAULT; end; function NeedInstallVC8(): Boolean; begin Result := IsMsiProductInstalled(VCREDIST_X86); #ifdef Debug if Result then begin MsgBox('Could not find VCREDIST, will install', mbInformation, MB_OK); end else begin MsgBox('Found VCREDIST, no need to install', mbInformation, MB_OK); end; #endif end; function InitializeSetup(): Boolean; var begin // Check for prerequisites Result := CheckDotNetVersions(); vc8Missing := NeedInstallVC8(); Result := Result And vc8Missing; end; |
Maar ook al heb ik die versie geinstalleerd op mijn pc en is {9A25302D-30C0-39D9-BD6F-21E6EC160475} aanwezig in mijn registry, het resultaat is altijd dat VCRedist niet is geinstalleerd.
Mijn vraag is dan ook hoe kan ik het wel juist detecteren?
Mijn tweede vraag is, als de detectie werkt moet de VC++ installer gestart worden onder een Admin-account. Hoe kan ik het commando 'Run As' uitvoeren en zo het standaard Windows inlogscherm tonen?
[Edit:]
Ik heb wat messageboxen toegevoegd en nog meer gegoogled en nu blijkt dat MsiQueryProductState(ProductId) INSTALLSTATE_INVALIDARG terug geeft.
Maar ik kan niet vinden hoe ik het dan moet doen.
[ Voor 5% gewijzigd door Verwijderd op 23-04-2010 12:09 ]