#c# #wpf #permissions #wmi #etw
Вопрос:
Я пишу приложение C# WPF, которое:
- Собирает информацию об оборудовании с помощью WMI (с
ManagementObjectSearcher
) - Захватывает события отрисовки ETW процессов для измерения кадров в секунду (с
TraceEventSession
)
Я использую установщик проекта установки для распространения приложения. Но после установки на другой компьютер exe открывается только с правами администратора.
Google не помог мне найти ответ на:
- Почему мое приложение запускается без разрешения на моем компьютере?
- Для какой задачи требуются разрешения и как я должен об этом знать?
- Есть ли способ решить проблему без разрешения?
- Почему мое приложение не запрашивает разрешения, как это делают другие приложения?
Я был бы очень признателен за ответ на один или все эти вопросы! Спасибо.
Ответ №1:
Многие операции, связанные с интерфейсами управления WMI, требуют прав администратора, это просто факт. Вы точно не указали, что вы там делаете, но для запроса некоторой информации об оборудовании, вероятно, потребуется это.
Чтобы проверить, для какого именно вызова требуются права администратора, запустите приложение на своем компьютере без прав администратора и проверьте, какой вызов завершается неудачно. Вы даже можете отлаживать свое приложение в этом режиме (просто убедитесь, что вы не запускаете Visual Studio от имени администратора).
Чтобы для вашего приложения требовались права администратора, создайте файл манифеста приложения (используйте шаблон «Манифест приложения» в окне «Новый файл») и добавьте строку requestedExecutionLevel
под <requestedPrivileges>
узлом следующим образом:
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
Это приведет к тому, что Windows будет запрашивать права администратора при каждом запуске приложения. Это глобальная настройка для всего приложения. Невозможно запросить разрешение только в том случае, если оно вам нужно.
Комментарии:
1. Я собираю информацию о версии операционной системы, процессоре, графическом процессоре, материнской плате и оперативной памяти.
2. @гаврилихин. d Как уже было сказано, вы должны проверять каждый вызов отдельно. Если вы правильно реализовали обработку ошибок, вы должны увидеть, какой вызов завершается ошибкой при запуске от имени неадминистратора.
3. Хорошо, теперь я хочу запустить UAC только один раз (при установке). Возможно ли это? Я слышал, что переписывание моего приложения в качестве службы Windows может помочь
4. Да, службы могут запускаться с правами администратора. Другой (вероятно, более простой) альтернативой является запуск приложения через планировщик задач. Это также может обойти запрос UAC.