[Delphi] Start menu items aanmaken bij installatie.

Pagina: 1
Acties:

  • bluebit
  • Registratie: Augustus 2001
  • Laatst online: 18-07 21:47

bluebit

Fear the bunny

Topicstarter
Hallo,

ik ben een installer aan het schrijven, het enige wat nog fout gaat is het plaatsen van items in het start menu. Ik maak wel links naar de programma's aan, alleen worden die ook in de folder waar de programma's staan opgeslagen....Da's dus niet de bedoeling.
Hier is de code :

function CreateShortcut(SourceFileName: string;Location: ShortcutType;SubFolder,WorkingDir,Parameters,Description: string):string;
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
LinkName: string;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;

MySLink.SetPath(PChar(SourceFileName));
MYSLink.SetWorkingDirectory(PChar(SubFolder));
MySLink.SetDescription(PChar(Description));

LinkName := ChangeFileExt(SourceFileName, '.lnk');
showmessage (LinkName); //test test
MyPFile.Save(PWChar(LinkName), False);
Result := LinkName;
end;

function GetProgramDir: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False);
Result := reg.ReadString('Programs');
reg.CloseKey;
finally
reg.Free;
end;
end;

DE aanroep is als volgt :
resPath := CreateShortcut(PROG1, _STARTMENU, GetProgramDir,'','','Customer Manager');

PROG1 is de lokatie van bestanden op pc waarnaar een link gemaakt moet worden
_STARTMENU is een keuze (nog niet geimplementeerd)
GetProgramDir is de lokatie van het startmenu
twee lege parameters, nog niet in gebruik
Customer Manager is de omschrijving.

Hij maakt dus wel een link aan, maar in de lokatie van PROG1 en niet bij GetProgramDir.

Hoe is dit op te lossen, volgens mij ben ik iets vergeten..

TIA!

I hope I never get so old I get religious


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Niet meteen een antwoord op je vraag, maar waarom maak je geen gebruik van Installshield express, dat, afaik bij Delphi meegeleverd is?

https://fgheysels.github.io/


  • bluebit
  • Registratie: Augustus 2001
  • Laatst online: 18-07 21:47

bluebit

Fear the bunny

Topicstarter
voornamelijk experimentele redenen.......de installatie moet namelijk veel sterker beperkt zijn in opties > komt door de toekomstige gebruiker van het programma.

I hope I never get so old I get religious


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Gebruik dan InnoSetup. Die is geheel of gedeeltelijk "unattended" te maken en is nog gratis ook.

日本!🎌


  • bluebit
  • Registratie: Augustus 2001
  • Laatst online: 18-07 21:47

bluebit

Fear the bunny

Topicstarter
HEhehe, heb het eindelijk gevonden.....

for those who are interested :

function CreateShortcut(SourceFileName: string;Location: ShortcutType;SubFolder,WorkingDir,Parameters,Description: string):string;
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
LinkName: Widestring;
SaveName : Widestring;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;

MySLink.SetPath(PChar(SourceFileName));
MYSLink.SetWorkingDirectory(PChar(SubFolder));
MySLink.SetDescription(PChar(Description));

LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName);
SaveName := subfolder+'\'+LinkName;
showmessage (SaveName); //test test
MyPFile.Save(PWChar(SaveName), False);
Result := LinkName;
end;

thanks for the replies!

I hope I never get so old I get religious