Partilhar via


Depurar provedores

Os provedores, a menos que sejam provedores desacoplados em execução em um aplicativo, são carregados em um processo de Wmiprvse.exe e não por meio de Svchost.exe com um processo de Winmgmt.exe. Para obter mais informações, consulte Hospedagem e segurança do provedor.

Ao parar em um ponto de interrupção, o depurador do Visual Studio congela todo o processo de host do provedor, que geralmente é o host compartilhado Wmiprvse.exe. Isso impede a operação de quaisquer outros componentes hospedados nesse processo, incluindo a extensão do Gerenciador de Servidores WMI. Os aplicativos cliente que chamam o provedor também são bloqueados. Os problemas resultantes são piores no Windows 2000 e anteriores porque o provedor é carregado no processo de serviço WMI (Winmgmt.exe).

Se você executar o Gerenciador de Servidores WMI em outra instância, o IDE do Visual Studio não congelará e você poderá liberar o ponto de interrupção. É recomendável que você execute seu provedor em um processo de hospedagem separado durante a fase de desenvolvimento para que a interrupção em um ponto de interrupção congele apenas o processo que hospeda seu provedor. As outras funções no WMI continuam acessíveis para o Gerenciador de Servidores WMI e quaisquer outros aplicativos ou scripts baseados em WMI. Além disso, se o provedor falhar, ele não afetará a operação de outros provedores carregados no mesmo processo de host.

Para fazer com que o provedor seja carregado em seu próprio processo de host, modifique o registro do provedor para definir a propriedade __Win32Provider.HostingModel como NetworkServiceHost:[MyProvider], onde MyProvider pode ser qualquer cadeia de caracteres que identifique exclusivamente seu provedor. Por exemplo, use o valor __Win32Provider.ClsId. Quando o provedor estiver pronto para ser enviado, retorne __Win32Provider.HostingModel para o valor pretendido, como NetworkServiceHost.

Se não estiver depurando o carregamento do provedor, você poderá chamar o método Load da classe MSFT_Providers para forçar o provedor a ser carregado e, em seguida, anexado ao processo de Wmiprvse.exe que tem a DLL carregada, e depurar conforme necessário.

Solução de problemas do WMI

Classes de solução de problemas de WMI