Compartir vía


Cómo adquirir un bloqueo en un objeto SEDO-Enabled

Para adquirir un bloqueo explícito en un objeto habilitado para SEDO

  1. Creación de una instancia de la SMS_ObjectLock clase WMI

  2. Obtenga el objeto de parámetros de método para el RequestLock método .

  3. Asigne la ruta de acceso del objeto que desea bloquear a la ObjectRelPath propiedad .

  4. Establezca la RequestTransfer propiedad en true.

  5. Cree una instancia de InvokeMethodOptions objeto. En la propiedad Context, agregue un par nombre-valor. El nombre debe ser "ObjectLockContext" y el valor debe ser un valor único, como un Guid. Agregue otro par nombre-valor con "MachineName" y el nombre del equipo que solicita el bloqueo.

  6. Llame a InvokeMethod en la SMS_ObjectLock instancia.

  7. InvokeMethod devolverá una SMS_ObjectLockRequest instancia de . Compruebe las RequestState propiedades y LockState para obtener más información sobre el éxito o el error de la solicitud.

Ejemplo

En el ejemplo siguiente se solicita un bloqueo explícito en una SMS_ConfigurationItem instancia de objeto.

 class Program  
 {  
     static void Main(string[] args)   
     {  
         ManagementScope scope = new ManagementScope(@"\\siteservername\root\sms\site_ABC");  
         RequestLock(scope);   
     }  

     public static void RequestLock(ManagementScope scope)   
     {  
         ManagementPath path = new ManagementPath("SMS_ObjectLock");  
         ManagementClass objectLock = new ManagementClass(scope, path, null);   

         ManagementBaseObject inParams = objectLock.GetMethodParameters("RequestLock");  
         inParams["ObjectRelPath"] = "SMS_ConfigurationItem.CI_ID=30";  
         inParams["RequestTransfer"] = true;   

         InvokeMethodOptions options = new InvokeMethodOptions();  
         options.Context.Add("ObjectLockContext", Guid.NewGuid().ToString());  
         options.Context.Add("MachineName", "RequestingComputer");  

         ManagementBaseObject result = objectLock.InvokeMethod("RequestLock", inParams, options);     

     }  
}  

El objeto SMS_ObjectLockRequest contiene las siguientes propiedades:

Propiedad Descripción
RequestID Identificador único de la solicitud.
ObjectRelPath Ruta de acceso del objeto para el que se solicita el bloqueo.
RequestState Indica el éxito o el error de la solicitud.
LockState Indica el estado actual del bloqueo solicitado.
AssignedUser Indica el usuario asignado actualmente del bloqueo solicitado.
AssignedObjectLockContext Indica ObjectLockContext al que está asignado actualmente el bloqueo.
AssignedMachine Indica el equipo asignado actualmente del bloqueo solicitado.
AssignedSiteCode Indica el sitio actualmente del bloqueo solicitado.
AssignedTimeUTC Indica la hora a la que se asignó el bloqueo solicitado.

RequestState
En la tabla siguiente se muestran los posibles valores de estado de solicitud. Los estados de solicitud Granted, GrantedAfterTimeout y GrantedLockWasOrphaned indican una solicitud correcta y, a continuación, el usuario puede realizar y guardar modificaciones en el objeto. Todas las demás solicitudes indican un error.

RequestStateID RequestStateName
0 Unknown
2 Solicitado
3 RequestedCanceled
4 ResponseReceived
10 Concedido
11 GrantedAfterTimeout
12 GrantedLockWasOrphaned
20 DeniedLockAlreadyAssigned
21 DeniedInvalidObjectVersion
22 DeniedLockNotFound
23 DeniedLockNotLocal
24 DeniedRequestTimedOut
50 Error
52 ErrorRequestNotFound
53 ErrorRequestTimedOut

LockState
En la tabla siguiente se muestran los posibles valores de estado de bloqueo.

LockStateID LockStateName
0 Sin asignar
1 Asignado
2 Solicitado
3 PendingAssignment
4 TimedOut
5 NotFound

Compilar el código

El ejemplo de C# requiere:

Espacios de nombres

Sistema

System.Management

Ensamblado

Programación sólida

Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.

Consulta también

Configuration Manager SEDO