调试提供程序
提供程序(除非是应用程序中运行的分离提供程序)将在 Wmiprvse.exe 进程中加载,而不是通过 Svchost.exe 使用 Winmgmt.exe 进程加载。 有关详细信息,请参阅提供程序托管和安全性。
在断点处停止时,Visual Studio 调试程序会冻结整个提供程序主机进程,该进程通常是共享主机 Wmiprvse.exe。 这会阻止该进程中托管的任何其他组件(包括 WMI 服务器资源管理器扩展)的操作。 调用提供程序的客户端应用程序也会被阻止。 导致的问题在 Windows 2000 及更早版本中更严重,因为提供程序已加载到 WMI 服务进程 (Winmgmt.exe) 中。
如果在另一个实例中运行 WMI 服务器资源管理器,则 Visual Studio IDE 不会冻结,并且能够释放断点。 建议在开发阶段在单独的托管进程中运行提供程序,这样在断点处停止只会冻结托管提供程序的进程。 WMI 服务器资源管理器和任何其他基于 WMI 的应用程序或脚本仍可访问 WMI 中的其他函数。 此外,如果提供程序崩溃,则不会影响加载到同一主机进程中的其他提供程序的操作。
若要使提供程序在其主机进程中加载,请修改提供程序注册以将 __Win32Provider.HostingModel 属性设置为 NetworkServiceHost:[MyProvider]
,其中 MyProvider 可以是唯一标识提供程序的任何字符串。 例如,使用 __Win32Provider.ClsId 值。 当提供程序准备好交付时,将 __Win32Provider.HostingModel 返回到预期值,例如 NetworkServiceHost。
如果不调试提供程序加载,则可以调用 MSFT_Providers 类的 Load 方法来强制加载提供程序,然后附加到加载 DLL 的 Wmiprvse.exe 进程,并根据需要进行调试。
相关主题