[InstallShield Express] functie van Microsoft Installer API

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 05:48

Tomatoman

Fulltime prutser

Topicstarter
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:

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
{ 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.
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 :(. Het probleem is dat dezes functie een handle nodig hebben:

Delphi:
1
2
function MsiSetProperty(hInstall: Longword; 
  Name, Value: PChar): Longword; stdcall;
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. 8)7

[ Voor 17% gewijzigd door Tomatoman op 29-12-2002 02:08 ]

Een goede grap mag vrienden kosten.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 05:48

Tomatoman

Fulltime prutser

Topicstarter
Het probleem hierboven heb ik nog steeds niet opgelost. Sterker nog, er lijkt een (hiervan losstaande) bug in InstallShield Express te zitten: als je een silent install doet, wordt het serienummer niet eens gecheckt! Het product wordt dan gewoon geïnstalleerd zonder een geldig serienummer. Fijne ontwikkelaars, daar bij InstallShield :r.

Een goede grap mag vrienden kosten.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Maakt IS Express niet 'normale' installs? Een MSI installer is een heel ander formaat en benodigt ook een andere installer.

Ik persoonlijk ben ook erg teleurgesteld in de support die IS levert en het grote aantal bugs dat de producten bevatten. Ik ben dan ook overgegaan op gratis alternatieven die net zo goed, zo niet beter werkten. Zoals Inno Setup http://www.jrsoftware.org/isinfo.php (Ook in combinatie met http://www.wintax.nl/isx/ en http://www.istool.org/). Je kan daar je eigen schermen maken voor de registratie en in het installscript zelf de controle uitvoeren of extern in een dll als je dat wilt. En het installscript is pascal, de source is vrij beschikbaar en geschreven in Delphi.

We adore chaos because we like to restore order - M.C. Escher


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 05:48

Tomatoman

Fulltime prutser

Topicstarter
Schopje. Nog steeds geen oplossing :'(


[edit] InstallShield Express maakt trouwens wel MSI-gebaseerde setupprogramma's.

[ Voor 59% gewijzigd door Tomatoman op 02-01-2003 14:09 ]

Een goede grap mag vrienden kosten.