GERER LES SERVICES DE WINDOWS AVEC WINSVC

Signaler
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
29 août 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40408-gerer-les-services-de-windows-avec-winsvc

Messages postés
6
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
29 août 2008

En effet. il faut faire la modif de jojoprout dans ServiceCreate si non, ca ne fonctionne pas.
Messages postés
5
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
26 décembre 2007

Bonjour.
Le code est génial pour le pc local mais ne fonctionne pas sur un pc sur le réseau local...
Pourquoi ??
Messages postés
106
Date d'inscription
mardi 18 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2007

simple et pratique
Messages postés
3
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

Me revoici me revoila...

Je te propose une function complémentaire à ton unité ElgServiceNT, une fonction permettant d'indiquer la description du service. Pour ce faire, il nous faut au préalable ajouter une unité supplémentaire permettant de combler un oubli(?) dans l'unité WinSvc. En effet, la function permettant de faire la description du service est ChangeServiceConfig2 et elle ne s'y trouve pas dans WinSvc.

Voici la nouvelle unité :

unit WinSVC_fragment;

interface

uses WinSVC, Windows;

function ChangeServiceConfig2A(hService: SC_HANDLE; dwInfoLevel: DWord;
lpInfo: Pointer): BOOL; stdcall;
function ChangeServiceConfig2W(hService: SC_HANDLE; dwInfoLevel: DWord;
lpInfo: Pointer): BOOL; stdcall;
function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWord;
lpInfo: Pointer): BOOL; stdcall;

type
_SERVICE_DESCRIPTIONA = packed record
lpDescription: PChar;
end;
TServiceDescriptionA = _SERVICE_DESCRIPTIONA;
PServiceDescriptionA = ^TServiceDescriptionA;

_SERVICE_DESCRIPTIONW = packed record
lpDescription: PWChar;
end;
TServiceDescriptionW = _SERVICE_DESCRIPTIONW;
PServiceDescriptionW = ^TServiceDescriptionW;

//we use the ANSI version
TServiceDescription = TServiceDescriptionA;

const
SERVICE_CONFIG_DESCRIPTION = 1;
SERVICE_CONFIG_FAILURE_ACTIONS = 2;

implementation

function ChangeServiceConfig2A; external advapi32 name 'ChangeServiceConfig2A';
function ChangeServiceConfig2W; external advapi32 name 'ChangeServiceConfig2W';
function ChangeServiceConfig2; external advapi32 name 'ChangeServiceConfig2A';

end.

...la nouvelle function dans ton unité :

{ajoute une description du service}
function ServiceDescription(const Value: String; SrvName : string; Machine : string = '') : Boolean;
var
sd: TServiceDescription;
SrvHandle : Cardinal;
begin
SrvHandle := ServiceOpen( SrvName, Machine );
sd.lpDescription := PChar(Value);
try
result := ChangeServiceConfig2(SrvHandle, SERVICE_CONFIG_DESCRIPTION, @sd);
finally
CloseServiceHandle( SrvHandle );
end;
end;

...ne pas oublier bien entendu de rajouter
dans la partie uses WinSvc_fragment.

Cette nouvelle function s'utilisera comme les précédentes...

PS : je l'ai testé et ô miracle ça marche !
Afficher les 19 commentaires