3

Я создал службу Windows, которая создает форму, в которой для управления соке создается значок панели инструментов. Я могу установить через установщик, созданный в Visual Studio, но когда я иду в Службы и запускаю свой сервис, он дает мне сообщение об ошибке, когда он начал и остановился немедленно.Windows Service start, затем немедленно останавливается

Вот код услуги:

public Service() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     base.OnStart(args); 

     ServiceName = "WizardServer"; 
     CanPauseAndContinue = false; 
     CanHandleSessionChangeEvent = true; 
     CanStop = true; 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     try 
     { 
      connectionHandler = new ConnectionHandler(); 
      serviceThread = new System.Threading.Thread(new ThreadStart(serviceTarget)); 
      alive = true; 
      serviceThread.Start(); 
     } 
     catch {} 
    } 

    private void serviceTarget() 
    { 
     Application.Run(new Form1(connectionHandler)); 

     while (alive) 
     { 
      Thread.Sleep(10000); 
     } 
    } 

    protected override void OnStop() 
    { 
     base.OnStop(); 

     try 
     { 
      connectionHandler.stop(); 
     } 
     catch {} 

     serviceThread.Abort(); 

     alive = false; 
     Stop(); 
    } 

PS: Я проверил форму и она работает просто отлично.

+3

Что необходимо войти событие разгласить? –

+0

Это обычно означает, что при запуске службы происходит ошибка. У вас также есть пустая попытка ... поймать. Может быть ошибка, которую вы глотаете, и вам нужно зафиксировать эту ошибку, чтобы узнать, что это такое. Обычно я использую текстовый файл для захвата этих ошибок, так как вы действительно не можете видеть ошибки из службы. –

+5

Обычно службы Windows не имеют пользовательских интерфейсов, и Microsoft настоятельно рекомендует, чтобы они этого не сделали. См. Http://msdn.microsoft.com/en-us/library/ms683502%28v=vs.85%29.aspx – hatchet

ответ

1

У меня была эта проблема и поиск много часов в Google, после чего я нашел решение. Вы можете добавить следующий код в свой код. Добавьте InitializeTimer() в свой класс constructor.You должен установить oTimer.Enabled = true и oTimer.Start() на OnStart() и oTimer.Stop() на OnStop().

Код:

void create() 
    { 
     string s = ""; 
    } 
    void InitializeTimer() 
    { 
     oTimer = new System.Timers.Timer(interval); 
     oTimer.AutoReset = true; 
     oTimer.Enabled = true; 
     oTimer.Elapsed += new System.Timers.ElapsedEventHandler(oTimer_Elapsed); 
    } 

    void oTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     CreateFileData(); 
    } 

    void CreateFileData() 
    { 
     string path = @"C:\SimpleWcfService\SimpleWindowsService\bin\Release\Singh.txt"; 
     StreamWriter oStreamWriter = new StreamWriter(path, true); 
     oStreamWriter.WriteLine(DateTime.Now.ToString()); 
     oStreamWriter.Close(); 
     oStreamWriter = null; 
    } 
Смежные вопросы