Ir al contenido


Foto

Manejar servicios con WMI


  • Por favor identifícate para responder
3 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 31 octubre 2012 - 04:28

No recuerdo si había escrito algo parecido en esta sección pero, por si acaso, dejo estas funciones por aquí:



delphi
  1. uses ComObj,  ActiveX;
  2.  
  3. function SrvExists(Name: String): Boolean;
  4. var
  5.   ScriptControl: OleVariant;
  6.   WmiService: OleVariant;
  7.   Items: IUnknown;
  8.   Enum: IEnumVariant;
  9.   Fetched: Cardinal;
  10.   Item: OleVariant;
  11. begin
  12.   Result:= FALSE;
  13.   ScriptControl:= CreateOleObject('ScriptControl');
  14.   ScriptControl.Language := 'VBScript';
  15.   WmiService:= ScriptControl.Eval('GetObject("winmgmts:\\.\root\cimv2")');
  16.   Items:= WMIService.ExecQuery('SELECT * FROM Win32_Service Where Name='
  17.     + QuotedStr(Name))._NewEnum;
  18.   Enum:= Items as IEnumVariant;
  19.   Enum.Reset;
  20.   Enum.Next(1, Item, Fetched);
  21.   while Fetched = 1 do
  22.   begin
  23.     try
  24.       try
  25.         Result:= TRUE;
  26.         Exit;
  27.       finally
  28.         Enum.Next(1, Item, Fetched);
  29.       end;
  30.     except
  31.  
  32.     end;
  33.   end;
  34. end;
  35.  
  36. function SrvStart(Name: String): Boolean;
  37. var
  38.   ScriptControl: OleVariant;
  39.   WmiService: OleVariant;
  40.   Items: IUnknown;
  41.   Enum: IEnumVariant;
  42.   Fetched: Cardinal;
  43.   Item: OleVariant;
  44. begin
  45.   Result:= FALSE;
  46.   ScriptControl:= CreateOleObject('ScriptControl');
  47.   ScriptControl.Language := 'VBScript';
  48.   WmiService:= ScriptControl.Eval('GetObject("winmgmts:\\.\root\cimv2")');
  49.   Items:= WMIService.ExecQuery('SELECT * FROM Win32_Service Where Name='
  50.     + QuotedStr(Name))._NewEnum;
  51.   Enum:= Items as IEnumVariant;
  52.   Enum.Reset;
  53.   Enum.Next(1, Item, Fetched);
  54.   while Fetched = 1 do
  55.   begin
  56.     try
  57.       try
  58.         Item.StartService;
  59.         Result:= TRUE;
  60.         Exit;
  61.       finally
  62.         Enum.Next(1, Item, Fetched);
  63.       end;
  64.     except
  65.  
  66.     end;
  67.   end;
  68. end;
  69.  
  70. function SrvStop(Name: String): Boolean;
  71. var
  72.   ScriptControl: OleVariant;
  73.   WmiService: OleVariant;
  74.   Items: IUnknown;
  75.   Enum: IEnumVariant;
  76.   Fetched: Cardinal;
  77.   Item: OleVariant;
  78. begin
  79.   Result:= FALSE;
  80.   ScriptControl:= CreateOleObject('ScriptControl');
  81.   ScriptControl.Language := 'VBScript';
  82.   WmiService:= ScriptControl.Eval('GetObject("winmgmts:\\.\root\cimv2")');
  83.   Items:= WMIService.ExecQuery('SELECT * FROM Win32_Service Where Name='
  84.     + QuotedStr(Name))._NewEnum;
  85.   Enum:= Items as IEnumVariant;
  86.   Enum.Reset;
  87.   Enum.Next(1, Item, Fetched);
  88.   while Fetched = 1 do
  89.   begin
  90.     try
  91.       try
  92.         Item.StopService;
  93.         Result:= TRUE;
  94.         Exit;
  95.       finally
  96.         Enum.Next(1, Item, Fetched);
  97.       end;
  98.     except
  99.  
  100.     end;
  101.   end;
  102. end;
  103.  
  104. function SrvDelete(Name: String): Boolean;
  105. var
  106.   ScriptControl: OleVariant;
  107.   WmiService: OleVariant;
  108.   Items: IUnknown;
  109.   Enum: IEnumVariant;
  110.   Fetched: Cardinal;
  111.   Item: OleVariant;
  112. begin
  113.   Result:= FALSE;
  114.   ScriptControl:= CreateOleObject('ScriptControl');
  115.   ScriptControl.Language := 'VBScript';
  116.   WmiService:= ScriptControl.Eval('GetObject("winmgmts:\\.\root\cimv2")');
  117.   Items:= WMIService.ExecQuery('SELECT * FROM Win32_Service Where Name='
  118.     + QuotedStr(Name))._NewEnum;
  119.   Enum:= Items as IEnumVariant;
  120.   Enum.Reset;
  121.   Enum.Next(1, Item, Fetched);
  122.   while Fetched = 1 do
  123.   begin
  124.     try
  125.       try
  126.         Item.Delete;
  127.         Result:= TRUE;
  128.         Exit;
  129.       finally
  130.         Enum.Next(1, Item, Fetched);
  131.       end;
  132.     except
  133.  
  134.     end;
  135.   end;
  136. end;



Saludos
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 31 octubre 2012 - 05:50

Hola seoane, pregunto, ¿Sirven para iniciar y detener un servicio por su nombre?.
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 31 octubre 2012 - 06:50

Hola seoane, pregunto, ¿Sirven para iniciar y detener un servicio por su nombre?.


Exacto. Iniciar, Detener y Eliminar
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 31 octubre 2012 - 02:37

Exacto. Iniciar, Detener y Eliminar


Ok, vuelvo y pregunto, ¿Serviría detener e iniciar la cola de impresora?.  ^o|
  • 0




IP.Board spam blocked by CleanTalk.