2012-06-04 4 views
0

Я создал службу Windows, которая будет запущена автоматически. Я также добавил следующий код для инсталлятора:Почему мой сервис не запускается после установки?

public ProjectInstaller() 
    { 
     InitializeComponent(); 
     serviceProcessInstaller1.AfterInstall += new InstallEventHandler(serviceProcessInstaller1_AfterInstall); 
    } 

    void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e) 
    { 
     try 
     { 
      var sc = new ServiceController(serviceInstaller1.ServiceName); 
      sc.Start(); 
     } 
     catch 
     { 
     } 
    } 

    protected override void OnCommitted(IDictionary savedState) 
    { 
     try 
     { 
      var sc = new ServiceController(serviceInstaller1.ServiceName); 
      sc.Start(); 
     } 
     catch 
     { 
     } 
    } 

Служба установлена ​​правильно, но она никогда не запускается.

Что может быть причиной этого?

+0

У меня были подобные проблемы в прошлом, потому что у меня был диспетчер управления службами (SCM) консоль открыта в то время как ООН/установка службы. Убедитесь, что SCM закрыт? – RobertMS

+0

Я закрыл консоль и повторил процесс установки, без везения –

+0

check: http://stackoverflow.com/questions/2247815/automatically-start-windows-service-on-install –

ответ

0

Убедитесь в вашей Main() функции, что у вас есть эта строка:

ServiceBase.Run(new ServiceClass());

Я был виновен в несколько раз уходящего Application.Run(new Class()); (Если вы начали из окна формы приложения)

+0

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

+1

О, хорошо, я не знал, что вы можете запустить его вручную. Я просто думал, что он вообще не смог начать –

0

Я создал услугу некоторое время назад и то, что моя отличается от вашей, заключается в том, что вы заявили этот путь

var sc = new ServiceController(serviceInstaller1.ServiceName);

шахта вместо того, чтобы serviceInstaller1.ServiceName я давал имя с помощью простой строки, как этого

var sc = new ServiceController("MyService");

Я думаю, что это не проблема вообще, но когда речь идет о всех услугах стоит попробовать

EDIT: давая взглянуть на него теперь я видел, что имя, которое я использовал, был на самом деле отображаемое_имя не имя службы, попробуйте передать его вручную или с помощью serviceInstaller1.DisplayName

+0

Я уже пробовал это в нескольких перестановках. Одним из них является ввод имени службы с текстом. К сожалению, без эффекта –

+0

Вы пробовали тот, который я сказал с помощью DisplayName вместо ServiceName?В моей службе DisplayName был «Sincronização», в то время как ServiceName был «Sincronização Pedido Produto», последний не работал для меня –

+0

Одна вещь: свойство StartType для serviceInstaller1 установлено на Automatic? –

0

Возможно, это зависит от другой службы. Или вы пробовали отложить начало?

1

Возможно, вам нужно ввести временный диагностический журнал, возможно, используя System.IO.File.WriteAllText();. Я знаю, что это не тот ответ, который вы ищете, но он, вероятно, даст вам самое быстрое решение!

try 
{ 
    var sc = new ServiceController(serviceInstaller1.ServiceName); 
    sc.Start(); 
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", "Service started"); 
} 
catch (Exception ex) 
{ 
    System.IO.File.WriteAllText(@"c:\temp\servicestart.txt", ex.Message); 
} 
-1

Это работало для меня

protected override void OnAfterInstall(IDictionary savedState) 
{ 
     base.OnAfterInstall(savedState); 
     System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName); 
     sc.Start(); 
} 
Смежные вопросы