Подтвердить что ты не робот

Установка саморазвивающейся службы Windows

Я пытаюсь развернуть службу, которую я написал. Здесь файл InstallLog:

Installing assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Affected parameters are:
   logtoconsole = 
   assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe
   logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog
Installing service TweetLinkService...
Creating EventLog source TweetLinkService in log Application...
Rolling back assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'.
Affected parameters are:
   logtoconsole = 
   assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe
   logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog
Restoring event log to previous state for source TweetLinkService.
An exception occurred during the Rollback phase of the System.Diagnostics.EventLogInstaller installer.
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched.  Inaccessible logs: Security.
An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete.

Как вы можете видеть, он не работает. Я не уверен, как это сделать, и ударил стену с Bing и Google. Я установил учетную запись в LocalSystem для serviceProcessInstaller1. Код компилируется отлично, но теперь я хотел бы запустить эту вещь... любые идеи? Я являюсь администратором моей коробки, и я выполняю команду:

InstallUtil TweetLinkQueue.exe

из консоли администратора VS2008.

ОБНОВЛЕНО/ShowCallStack вариант

Стек вызовов

An exception occurred during the Install phase.
System.Security.SecurityException: The source was not found, but some or all eve
nt logs could not be searched.  Inaccessible logs: Security.
   at System.Diagnostics.EventLog.FindSourceRegistration(String source, String m
achineName, Boolean readOnly)
   at System.Diagnostics.EventLog.SourceExists(String source, String machineName
)
   at System.Diagnostics.EventLogInstaller.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt
ate)
   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
   at System.Configuration.Install.TransactedInstaller.Install(IDictionary saved
State)

и вот конструктор:

public TweetLinkService()
{
    InitializeComponent();

    if (!EventLog.SourceExists("TweetLinkQueue"))
    {
        EventLog.CreateEventSource("TweetLinkQueue", "Log");

        TweetLinksLog.Source = "TweetLinkQueue";
        TweetLinksLog.Log = "Log";

        TweetLinksLog.WriteEntry("Log Created!");
    }
}

ОБНОВЛЕНО с ENTry Point:

namespace TweetLinkQueue
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new TweetLinkService() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}
4b9b3361

Ответ 1

Я не знаю, какова ваша конкретная проблема. Мне кажется, что проблема возникает при создании источника EventLog. Дважды проверьте, правильно ли вы сделали эту часть. Вы можете ссылаться на шаг за шагом здесь. РЕДАКТИРОВАТЬ: СПЕЦИАЛЬНО СМОТРЕТЬ В ШАГЕ 9. Проблема может возникнуть из-за того, что вы входите в журнал приложений вместо одного конкретного приложения.

Нет ничего плохого в использовании InstallUtil, но если вам нужно установить свою службу на чужой машине, InstallUtil не гарантируется. Вы можете выполнить это шаг за шагом, чтобы сделать исполняемый файл службы Windows самостоятельно установкой и удалением без необходимости установки InstallUtil. См. здесь для этих инструкций.

Ответ 2

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

Ответ 3

Чтобы решить эту проблему, щелкните правой кнопкой мыши на командной строке Visual Studio 2008 и щелкните "Запуск от имени администратора", после чего вы запустите свою команду, например installutil C:\mcWebService\bin\Debug\mcWebService.exe то он покажет вам успешное сообщение. Надеюсь, это решит ваше решение.

Ответ 4

У учетной записи LocalSystem обычно нет разрешения на чтение журнала событий безопасности (или создание источников событий, если на то пошло).

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

class Program {
    static void Main(string[] args) {
        EventLog.CreateEventSource("TestSource", "Application");
    }
}

Если вы выполните это, удастся ли это? Вы можете проверить его, посмотрев свойства журнала приложения и просмотрев источники событий на вкладке "Фильтр".

В качестве альтернативы, поскольку службы должны быть установлены в любом случае, вы можете добавить EventLogInstaller (который неверно назван - это действительно "EventSourceInstaller", который будет создавать EventLogs по мере необходимости) для сборки вместо использования EventLog.CreateEventSource в конструктор службы.

Ответ 5

Моя проблема заключалась в появлении окна ввода учетных данных, и я вводил свое имя пользователя без домена. Когда я ввел домен\имя пользователя, все было в порядке.