Центр программного обеспечения является инструментом, который позволяет, Вы для просмотра всех пакетов программного обеспечения держали в репозитории человечности в графическом интерфейсе пользователя. Это - утилита, которая похожа на это:
, С другой стороны, установка командной строкой использует инструменты такой в качестве apt-get install
для установки пакетов. В то время как те же пакеты найдены в утилитах установки командной строки и центре программного обеспечения, использование терминала позволяет пакетам быть установленными в ситуациях как на серверах, где GUI не присутствует.
Метод EventLog.SourceExists - это то, что вызывает это исключение. Самая распространенная причина в том, что он пытается получить доступ ко ВСЕМ журналам событий (включая журнал безопасности), для которых по умолчанию в Vista у вас не будет разрешений. Другая причина может заключаться в том, что источник, который вы ищете, не найден в журнале событий (что я считаю довольно странным!).
Временное решение:
bool sourceFound = false;
try
{
sourceFound = EventLog.SourceExists("MySource");
}
catch (SecurityException)
{
sourceFound = false;
}
Другой вариант - просто повысить ваши разрешения, однако вы, где, следуя пошаговым инструкциям, ваша служба будет работать под учетной записью LocalService (которая снова не будет иметь разрешений для этого конкретного метода). Следовательно, в документации MSDN вы найдете решение - проверить, существует ли источник событий в ServiceInstaller, а если нет, создать источник в установщике.
Являетесь ли вы локальным администратором на своей машине? Если это так, поместите следующую строку кода в верхнюю часть конструктора вашей службы Windows:
System.Diagnostics.Debugger.Break();
Когда служба начинает работать, она достигает этой точки останова, позволяя вам перейти в Visual Studio. Затем вы можете отлаживать оттуда, пока не обнаружите, где возникает исключение.
Получите копию Process Monitor и посмотрите, что произойдет - вы должны увидеть проблему как результат сбоя, и вы сможете провести расследование оттуда ...
edit: Чтобы уточнить, это бесплатный инструмент от Microsoft (sysinternals), и он делает то, что написано на банке :)
Вы должны исследовать, используя STL ' exe файл лежит в сетевой папке? Или помечено как «скачано из интернета»? Потому что в этих случаях .NET Framework будет назначать ему меньше разрешений, чем когда он был непосредственно на локальном диске и не отмечен как загруженный из Интернета.