[Delphi] Win 98 service registreren

Pagina: 1
Acties:

  • MidnightMotion
  • Registratie: April 2002
  • Laatst online: 03-04-2022
Ik heb een programma gemaakt en dat wil ik als service laten draaien onder 98, dit werkt allemaal goed zolang ik de code in een test progje zet. In het echte programma mislukt echter het registreren van de service...

De code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  TSARegisterService = function(dwProcessId, dwType: DWORD): DWORD;

var
  lMessage: TMsg;
  RegisterService: TSARegisterService;
  hKernel32: HInst;
begin
  hKernel32 := LoadLibrary('kernel32.dll');

  @RegisterService := GetProcAddress(hKernel32, 'RegisterServiceProcess');

  if Assigned(RegisterService) then
  begin
    if RegisterService(0, 1) = 0 then
      MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'None', MB_OK + MB_ICONERROR);
  end;
end;


GetLastError geeft de melding "Het systeem kan het opgegeven bestand niet vinden"

Zelf denk ik dat het aan een dpk ligt die ik meelink met het programma, kan dit wel als je je process als service wil laten draaien?

Ik heb al geprobeerd de DPK in de windows en windows\system directory te zetten maar helaas ook zonder succes...

Weet iemand hier meer van?

Eigenaar van domoticavergelijken.info


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Win95/98 en ME kennen geen echte services zoals je dat gewend bent onder NT/2000/XP. Services onder 98 zijn gewone programma's die eerder opgestart worden dan de rest. Het programma zelf moet er voor zorgdragen dat het niet sluit als iemand uitlogd en dat het niet in de actieve processen lijst komt. Dat laatste kan idd met RegisterServiceProcess. Probeer anders eens GetCurrentProcessID mee te geven ipv 0. Maar beide zou moeten werken. Verder zie ik nog dat je een FreeLibrary bent vergeten.

dpk's zijn de project bestanden voor een package en zijn runtime zeker niet nodig. Als je een dpk compileerd ontstaat er een .bpl. Alleen als je programma runtime packages gebruikt heb je deze bpl runtime ook nodig. Ik denk niet dat dit het geval is bij jouw.

[ Voor 4% gewijzigd door LordLarry op 02-10-2003 11:16 ]

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


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Heb je het al met expliciete GetCurrentProcessId geprobeerd als 1e parameter? Volgens de docs zou 0 moeten werken, maar in dit Delphi-voorbeeld doet men het expliciet en verder identiek aan jouw code...

Professionele website nodig?


  • MidnightMotion
  • Registratie: April 2002
  • Laatst online: 03-04-2022
Ik ben bekend met de verschillen tussen 98 en NT achtigen, de code die je ziet is niet de volledige code dus het kan inderdaad zijn dat er hier geen FreeLibrary staat.

Ik heb zowel met GetCurrentThreadId als met 0 geprobeerd, beide zonder resultaat... Hij blijft zeuren over een bestand wat niet gevonden kan worden (Handig trouwens dat de melding er ook even bij verteld om welk bestand het gaat...*zucht*)

Eigenaar van domoticavergelijken.info


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dat kan je bekijken met http://www.dependencywalker.com/. Laad m niet alleen in, maar draai ook de profiler zodat je ook de dynamisch geladen dll's kan achterhalen.

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


  • MidnightMotion
  • Registratie: April 2002
  • Laatst online: 03-04-2022
Ik ga het morgen eens bekijken, ik weet bijna zeker dat het de bpl is die niet meer gevonden kan worden zodra het proces als service wil starten. Dan alleen nog een oplossing vinden :)

Eigenaar van domoticavergelijken.info

Pagina: 1