Установка windows службы

561
02 мая 2017, 03:44

В командной строке работает:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe "C:\WindowsService1.exe"

Но я хочу произвести установку через свое приложение:

        System.Diagnostics.Process prc = new System.Diagnostics.Process();            
        prc.StartInfo.FileName = @"С:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ""C:\WindowsService1.exe""";
        prc.Start();

Выдает ошибку не удается найти указанный файл, хотя путь верный (в локальной переменной он аналогичен CMD). В чем дело?

Answer 1

Как насчет воспользоваться ManagedInstallerClass.InstallHelper()?

Пример:

public bool InstallService(string servicePath)
{
    try
    {
        ManagedInstallerClass.InstallHelper(new[] { servicePath });
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

Учтите, что ManagedInstallerClass.InstallHelper() может быть долгим процессом, поэтому я бы советовал предварительно обернуть его в таску и сделать этот метод ассинхронным.

Answer 2

Можно попробовать немного изменить вызов метода Start. Сейчас вы передаёте запускаемое приложение вместе с аргументами. Попробуйте использовать другую перегрузку метода Start.

https://msdn.microsoft.com/en-us/library/h6ak8zt5(v=vs.110).aspx

Т.е. в вашем примере это будет что-то вроде этого:

Process.Start("С:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe", "C:\WindowsService1.exe");

Или же так:

ProcessStartInfo startInfo = new ProcessStartInfo("С:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe");
startInfo.Arguments = "C:\WindowsService1.exe";
Process.Start(startInfo);

Ещё, как вариант, можно воспользоваться библиотекой Topshelf http://topshelf-project.com/, которая сильно упрощает работу с Windows Service.

После компиляции проект установка сервиса будет выглядеть как:

MyService.exe install
Answer 3

Как вариант.Есть такой набор инструментов называется WIX,для создания установщиков.http://www.schiffhauer.com/wix-template-for-installing-a-windows-service/ стоит взглянуть,преимущества его использования заключаются в следующем.В нём можно указывать,зависимости для службы,возможность переустанавливать,обновлять или удалять её,через установку и удаления программ.Вместо использования InstallUtil или sc инструментов.

READ ALSO
Ошибка в синтаксисе при создании UNIQUE INDEX в MS SQl

Ошибка в синтаксисе при создании UNIQUE INDEX в MS SQl

Пытаюсь создать уникальный индекс который формируется на основании данных из нескольких столбцов БДНо возникают синтаксические ошибки...

335
SmtpClient и Port для иностранной рассылки

SmtpClient и Port для иностранной рассылки

Какие Smtp и порты можно использовать для отправки сообщений между разными странами? Имеет ли значение выбор учетной записи если нужно отправить...

254
Создание рубрик программно

Создание рубрик программно

Допустим в цикле создаются записи, и нужно сразу в этом же цикле назначать новым записям рукрики

255
Передача переменных в json

Передача переменных в json

Есть задача вернуть из бд несколько значений по одному IDКак превратить переменные из БД в JSON формат? или как лучше сделать? Пример кода

288