[Delphi] Buggy service wil niet uit Win2k

Pagina: 1
Acties:

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb een service gemaakt in Windows 2000 met Delphi 6. Deze had ik dus even geinstalleerd om te testen. Maar nu kwam ik er vanavond achter dat hij nog steeds draait, alleen blijkt hij buggy te zijn: hij vreet 100% CPU. Niet de bedoeling. :)

Dus ik dacht, ik stop hem via Administrative Tools > Services. Dat wil niet, omdat hij dan er een interne Windows of Service fout is opgetreden. Stoppen wil dus niet. Tevens is de service gemakeerd om te verwijderen. Hij staat dus op Opstarttype: Uitgeschakeld.

Dan maar via Taakbeheer proberen. Ook dat wil niet, krijg als melding: Toegang geweigerd. Dit slaat nergens op, ik ben namelijk Administrator.

Iemand een idee hoe ik deze service verwijder/stop? Is een reboot de enige oplossing?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Met een reboot is het verholpen. Maar hoe kan ik het in de toekomst oplossen zonder een reboot?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op woensdag 21 november 2001 20:08 schreef jelmervos het volgende:
Ik heb een service gemaakt in Windows 2000 met Delphi 6. Deze had ik dus even geinstalleerd om te testen. Maar nu kwam ik er vanavond achter dat hij nog steeds draait, alleen blijkt hij buggy te zijn: hij vreet 100% CPU. Niet de bedoeling. :)

Dus ik dacht, ik stop hem via Administrative Tools > Services. Dat wil niet, omdat hij dan er een interne Windows of Service fout is opgetreden. Stoppen wil dus niet. Tevens is de service gemakeerd om te verwijderen. Hij staat dus op Opstarttype: Uitgeschakeld.

Dan maar via Taakbeheer proberen. Ook dat wil niet, krijg als melding: Toegang geweigerd. Dit slaat nergens op, ik ben namelijk Administrator.

Iemand een idee hoe ik deze service verwijder/stop? Is een reboot de enige oplossing?

Verwijderd

plaats 1 Tbutton, en een TEdit op een form, plus de volgende code:
code:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function EnableNTPrivilege (const privilege : string; state : Integer) : Integer;
var
  hToken : THandle;
  aluid : TLargeInteger;
  cbPrevTP : DWORD;
  tp, fPrevTP : PTokenPrivileges;
begin
  result := 0;
  if OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
  try
    LookupPrivilegeValue (Nil, PChar (privilege), aluid);

    cbPrevTP := SizeOf (TTokenPrivileges) + sizeof (TLUIDAndAttributes);

    GetMem (tp, cbPrevTP);
    GetMem (fPrevTP, cbPrevTP);
    try

    tp^.PrivilegeCount := 1;
    tp^.Privileges [0].Luid := aLuid;
    tp^.Privileges [0].Attributes := state;

    if not AdjustTokenPrivileges (hToken, False, tp^, cbPrevTP, fPrevTP^, cbPrevTP) then
      RaiseLastWin32Error;

    result := fPrevTP^.Privileges [0].Attributes;

    finally
     FreeMem (fPrevTP);
     FreeMem (tp);
    end
  finally
    CloseHandle (hToken);
  end
end;


procedure Terminate(pid:integer);
var
  handle : THandle;
begin
  handle := OpenProcess (PROCESS_TERMINATE, False, pid);
  if handle <> 0 then
  try
    if not TerminateProcess (handle, 0) then
    RaiseLastWin32Error
  finally
    CloseHandle (handle)
  end
  else
    RaiseLastWin32Error;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
EnableNTPrivilege ('SeDebugPrivilege', SE_PRIVILEGE_ENABLED);
Terminate(strtoint(edit1.text));
end;

end.

Type De pid van het process in edit1 en druk op de knop.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Perfect. Ik zal het zeker de volgende keer proberen als ik weer dit probleem krijg. Bedankt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

[servicenaam] -uninstall ????????

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op donderdag 22 november 2001 11:38 schreef robh het volgende:
[servicenaam] -uninstall ????????
Kan niet, hij draait nog.
En tevens was hij al gemarkeerd om te verwijderen. Had ik dus al gedaan.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Mr. B.
  • Registratie: Mei 2000
  • Niet online
Op woensdag 21 november 2001 21:42 schreef jelmervos het volgende:
Met een reboot is het verholpen. Maar hoe kan ik het in de toekomst oplossen zonder een reboot?
Je kunt eens kill.exe proberen (zit in de Win2000 Support Tools, die staan op de CD). Die kan soms processen wel killen als de task manager het niet kan :)

StatBar.nl - @GoT

Het verschil tussen theorie en praktijk is in de praktijk altijd veel groter dan in theorie.

Pagina: 1