Я собираюсь написать независимого поставщика WMI, чтобы мое приложение можно было отслеживать с помощью стандартных инструментов (вместо того, чтобы придумывать какой-то собственный протокол и затем писать плагин для приложения мониторинга). Я пытаюсь следовать примерам написания несвязанных провайдеров в .NET, но не могу заставить их работать без повышения прав.
Я в порядке с выполнением InstallUtil
с повышенными правами во время установки, что и следовало ожидать, учитываяон должен установить файл MOF
в систему. Когда приложение работает с повышенными правами, все работает, как и ожидалось, но я получаю WMIInfraException
, когда я запускаю приложение без повышения прав.
Я читаю документацию и примеры и нигде не заметил, что несвязанные поставщики имеютчтобы запустить приложение с повышенными правами, поэтому я не уверен, что я делаю что-то не так или нахожусь в ограничении модели безопасности WMI или в ограничении библиотеки .NET.
- можетразвязанный провайдер WMI будет использоваться без повышения прав?
- , если это ограничение библиотеки .NET, будет ли он работать, если я реализую провайдера в C ++ / COM?
using System;
using System.ComponentModel;
using System.Management.Instrumentation;
[assembly: WmiConfiguration(@"root\myapp", HostingModel = ManagementHostingModel.Decoupled)]
[RunInstaller(true)]
public class MyInstaller : DefaultManagementInstaller { }
[ManagementEntity]
public class MyExampleClass
{
[ManagementBind]
public MyExampleClass(int id) { ID = id; }
[ManagementKey]
public int ID { get; }
[ManagementProbe]
public int MyProperty => 42;
}
class Program
{
static object obj = new MyExampleClass(101);
[MTAThread]
static void Main()
{
try
{
InstrumentationManager.Publish(obj);
}
catch (Exception ex)
{
Console.WriteLine("Provider Installation Failed:\n" + ex);
}
Console.WriteLine("\nPress any key to exit");
Console.ReadKey(true);
}
}