Roland M Smith Ответов: 4

Добавление источника событий программно


У меня есть программа, написанная на C++ (не .Net), которая скомпилирована 64-битно и имеет права администратора в манифесте.

Я пытаюсь добавить параметры реестра для источника событий приложения, но он продолжает давать мне ошибки. Ключ находится под LocalMachine:
SYSTEM\CurrentControlSet\Services\EventLog\Application\myappname


Моя программа является службой и не имеет никаких проблем с доступом к значениям реестра под своим собственным ключом под
SYSTEM\CurrentControlSet\Services
.

Что я уже пробовал:

Я попытался использовать функции реестра, и это не удалось. У меня есть reg-файл, на который я могу дважды щелкнуть, и это работает. Программа-это сервис, поэтому в функции установки я хочу добавить источник события, а в функции удаления-удалить источник события, но ни то, ни другое не работает.

4 Ответов

Рейтинг:
2

Dave Kreskowiak

Приложение не получает прав администратора из файла манифеста. Он всегда получает свои права от учетной записи, которая его запустила. Если это служба, то на вкладке вход на странице свойств службы отображается учетная запись, под которой она запущена.

Кроме того, код не может предоставить себе больше разрешений, чем уже предоставлено учетной записью, которая его запустила. Если обычная учетная запись пользователя запускает ваше приложение, это максимальный уровень разрешений, который когда-либо будет иметь код. Он не может предоставить себе разрешение уровня администратора на это.

Как уже было сказано, ваше описание проблемы-нет. Нам нужно знать точные номера ошибок и сообщения, а также строки кода, которые их вызвали, чтобы помочь, иначе все это просто догадки.


Рейтинг:
1

Phil J Pearson

Цитата:
он продолжает давать мне ошибки
и
Цитата:
он не
не являются удовлетворительными описания проблемы.

Если вы возьмете на себя труд определить, что вы подразумеваете под этим, тогда вы можете сами определить причину. Если вы не описываете проблему лучше, чем это, не ожидайте лучшего ответа, чем этот.


Рейтинг:
1

Roland M Smith

Я уже все выяснил.

Если ключа не существует, я должен его создать. Чтобы удалить ключ, вы должны открыть ключ на один уровень выше.


Рейтинг:
1

Roland M Smith

Запуск командной строки от имени администратора не помогает. Следующее сообщение об ошибке: система не может найти указанный файл.

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_SET_VALUE, &hRegKey);
if ( dwResult == ERROR_SUCCESS ) {
   OutputDebugString(_T("RegOpenKeyEx worked"));
   RegCloseKey(hRegKey);
} else {
   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,
            dwResult, LANG_NEUTRAL, szErrText, sizeof(szErrText), NULL);
   OutputDebugString(_T("RegOpenKeyEx failed"));
   OutputDebugString(szErrText);
   return FALSE;
}


Roland M Smith

Программа на самом деле не работает как служба, это часть ее функции установки, которая запускается при запуске с аргументом команды.

Richard Deeming

Если вы хотите обновить свой вопрос, Нажмите зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос.

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением.

НЕ опубликуйте свое обновление или комментарий как новое "решение".