Como adquirir um bloqueio em um objeto SEDO-Enabled

Para adquirir um bloqueio explícito em um objeto habilitado para SEDO

  1. Criar uma instância da SMS_ObjectLock classe WMI

  2. Obtenha o objeto parâmetros de método para o RequestLock método.

  3. Atribua o caminho do objeto que você deseja bloquear à ObjectRelPath propriedade.

  4. Defina a RequestTransfer propriedade como true.

  5. Crie uma InvokeMethodOptions instância de objeto. Na propriedade Context, adicione um par nome/valor. O nome deve ser "ObjectLockContext" e o valor deve ser um valor exclusivo, como um Guid. Adicione outro par de nome/valor com "MachineName" e o nome do computador que solicita o bloqueio.

  6. Chame InvokeMethod na SMS_ObjectLock instância.

  7. InvokeMethod retornará uma SMS_ObjectLockRequest instância. Verifique as RequestState propriedades e LockState para obter mais informações sobre o sucesso ou falha da solicitação.

Exemplo

O exemplo a seguir solicita um bloqueio explícito em uma instância de SMS_ConfigurationItem 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);     

     }  
}  

O objeto SMS_ObjectLockRequest contém as seguintes propriedades:

Propriedade Descrição
Requestid Identificador exclusivo da solicitação.
ObjectRelPath O caminho do objeto para o qual o bloqueio é solicitado.
RequestState Indica o êxito ou a falha da solicitação.
LockState Indica o estado atual do bloqueio solicitado.
AssignedUser Indica o usuário atualmente atribuído do bloqueio solicitado.
AssignedObjectLockContext Indica ObjectLockContext ao qual o bloqueio está atribuído no momento.
AssignedMachine Indica o computador atribuído atualmente do bloqueio solicitado.
AssignedSiteCode Indica o site atualmente do bloqueio solicitado.
AssignedTimeUTC Indica o momento em que o bloqueio solicitado foi atribuído.

RequestState
A tabela abaixo exibe os possíveis valores de estado da solicitação. Os estados de solicitação Granted, GrantedAfterTimeout e GrantedLockWasOrphaned indicam uma solicitação bem-sucedida e o usuário pode fazer e salvar modificações no objeto. Todas as outras solicitações indicam erro.

RequestStateID RequestStateName
0 Desconhecido
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
A tabela abaixo exibe os possíveis valores de estado de bloqueio.

LockStateID LockStateName
0 Sem sinal
1 Atribuído
2 Solicitado
3 PendingAssignment
4 Timedout
5 Notfound

Compilando o código

O exemplo C# requer:

Namespaces

Sistema

System.Management

Assembly

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.

Confira também

Configuration Manager SEDO