In InstallShield Express 4 (de volledige versie, niet de met Delphi meegeleverde versie) kun je een zelfgeschreven DLL gebuiken om het serienummer te checken dat de gebruiker intypt in een setup-programma. Zo'n DLL heb ik met Delphi gebouwd en dat werkt perfect:
. Het probleem is dat dezes functie een handle nodig hebben:
Delphi:
Nu wil ik graag wat extra functionaliteit toevoegen door functies van de Microsoft Installer API (MSI) te gebruiken en dan met name MsiSetProperty en MsiGetProperty. En dat is waar ik vastloop 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
| { Serial number validation DLL for use with passwords in the InstallShield Customer Information Dialog. Serial number template: ?????-????? Serial number validation dll: validate.dll Validate function: ValidateSN Success return value: 1000 Valid password mask: ABCDE-***** (***** = any five-letter code) } library validate; uses SysUtils, Classes, Windows; function ValidateSN(Wnd: HWND; SrcDir, SupportDir, SerialNum, Dbase: PAnsiChar): Longint; stdcall; const Caption = 'Invalid Serial Number'; Msg = 'The Serial Number you entered "%s"'#13#10'is not valid.' + 'Please verify that it is correct.'; Abcde = 'ABCDE'; var Serial: string; begin Serial := Trim(SerialNum); if (UpperCase(Copy(Serial, 1, Length(Abcde))) = Abcde) and (Length(Serial) = 11) then Result := 1000 // indicates a valid serial number else begin Result := -1; // indicates an invalid serial number MessageBox(Wnd, PAnsiChar(Format(Msg, [Serial])), PAnsiChar(Caption), MB_ICONWARNING or MB_OK or MB_SETFOREGROUND or MB_TASKMODAL); end; end; exports ValidateSN; begin end. |
Delphi:
Waar haal ik nou die hInstall handle vandaan? Zelfs in de nieuwsgroepen van InstallShield kan ik geen oplossing vinden. Ik weet het echt niet meer. 1
2
| function MsiSetProperty(hInstall: Longword; Name, Value: PChar): Longword; stdcall; |
[ Voor 17% gewijzigd door Tomatoman op 29-12-2002 02:08 ]
Een goede grap mag vrienden kosten.