J'essaie de suivre http://edn.embarcadero.com/article/28604 pour redémarrer Interbase. Voici un code:Comment redémarrer Interbase
program IBRestart;
{$APPTYPE CONSOLE}
uses
SysUtils, winsvc;
var
vManager, vService: SC_Handle;
vtmp: TServiceStatus;
begin
vManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if vManager > 0 then
begin
vService := OpenService(vManager, 'InterBaseGuardian', SERVICE_START or SERVICE_STOP);
if vService = 0 then // vService is always 0 here, why ?
CloseServiceHandle(vManager)
else
if ControlService(vService, SERVICE_CONTROL_STOP, vTmp) and
QueryServiceStatus(vService, vTmp) and
(vTmp.dwCurrentState = SERVICE_STOPPED) then
begin
WriteLn('Success');
end;
end;
end.
Je remarque que le service est répertorié comme "Interbase 2009 The Guardian gds_db" dans la boîte de dialogue des services. J'ai essayé différentes variantes de ceci comme argument à OpenService sans succès ... Des conseils?
EDIT: liste de départ net du service comme InterBase 2009 The Guardian gds_db et InterBase 2009 Server gds_db
RaiseLastOSError retourner ce dans les deux cas: Projet IBRestart.exe soulevé EOSError classe d'exception avec le message ' Erreur système. Code: 1060. Le service spécifié n'existe pas en tant que service installé ».
Ainsi, vService est toujours 0 dans le code ci-dessus. J'essaie même d'arrêter un autre service comme Themes et cela fonctionne réellement. Est-ce que ce peut être les espaces dans la chaîne qui doivent être spéciaux manipulés? J'ai essayé de fermer IIS Admin et il a renvoyé le même message d'erreur que Interbase.
Excellent. C'est assez pour moi! –
heureux qu'il a travaillé pour vous si bien! –