C#: Простая служба Windows дает Исключение безопасности

Центр программного обеспечения является инструментом, который позволяет, Вы для просмотра всех пакетов программного обеспечения держали в репозитории человечности в графическом интерфейсе пользователя. Это - утилита, которая похожа на это:

software center

, С другой стороны, установка командной строкой использует инструменты такой в качестве apt-get install для установки пакетов. В то время как те же пакеты найдены в утилитах установки командной строки и центре программного обеспечения, использование терминала позволяет пакетам быть установленными в ситуациях как на серверах, где GUI не присутствует.

13
задан sbenderli 3 September 2009 в 14:51
поделиться

4 ответа

Метод EventLog.SourceExists - это то, что вызывает это исключение. Самая распространенная причина в том, что он пытается получить доступ ко ВСЕМ журналам событий (включая журнал безопасности), для которых по умолчанию в Vista у вас не будет разрешений. Другая причина может заключаться в том, что источник, который вы ищете, не найден в журнале событий (что я считаю довольно странным!).

Временное решение:

bool sourceFound = false;
try
{
    sourceFound = EventLog.SourceExists("MySource");
}
catch (SecurityException)
{
    sourceFound = false;
}

Другой вариант - просто повысить ваши разрешения, однако вы, где, следуя пошаговым инструкциям, ваша служба будет работать под учетной записью LocalService (которая снова не будет иметь разрешений для этого конкретного метода). Следовательно, в документации MSDN вы найдете решение - проверить, существует ли источник событий в ServiceInstaller, а если нет, создать источник в установщике.

19
ответ дан 1 December 2019 в 22:58
поделиться

Являетесь ли вы локальным администратором на своей машине? Если это так, поместите следующую строку кода в верхнюю часть конструктора вашей службы Windows:

System.Diagnostics.Debugger.Break();

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

1
ответ дан 1 December 2019 в 22:58
поделиться

Получите копию Process Monitor и посмотрите, что произойдет - вы должны увидеть проблему как результат сбоя, и вы сможете провести расследование оттуда ...

edit: Чтобы уточнить, это бесплатный инструмент от Microsoft (sysinternals), и он делает то, что написано на банке :)

0
ответ дан 1 December 2019 в 22:58
поделиться

Вы должны исследовать, используя STL ' exe файл лежит в сетевой папке? Или помечено как «скачано из интернета»? Потому что в этих случаях .NET Framework будет назначать ему меньше разрешений, чем когда он был непосредственно на локальном диске и не отмечен как загруженный из Интернета.

0
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: