Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание службы


Автор: puZzo 14.10.2010, 03:32
Написал службу простейшую, по одному примеру, запуск службы, она создает поток, в потоке форма и таймер. Служба устанавливается и запускается, а вот форма с таймером никак не желают, что-то где-то упустил?

Код


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace myService
{
    public class myService : ServiceBase
    {
        public const string MyServiceName = "myService";

        System.Windows.Forms.Timer timer1;
        System.Windows.Forms.Form form1;
        System.Threading.Thread thread1;
        
        
        
        public myService()
        {
            InitializeComponent();
        }
        
        private void InitializeComponent()
        {
            this.ServiceName = MyServiceName;
        }
    
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
        

        // *************************************
        protected override void OnStart(string[] args)
        {
            thread1 = new Thread(new ThreadStart(ThreadProc));
            thread1.Start();
            thread1.IsBackground = true;
        }
        
        // *************************************
        protected override void OnStop()
        {
            thread1.Abort();
        }
        
        
        //  Фоновый поток с формой и таймером
                // *************************************
        void ThreadProc()
        {
            // Создание формы и таймера в потоке
            form1 = new System.Windows.Forms.Form();
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(onTimerTick);
            timer1.Interval = 5000;
            timer1.Start();
            form1.Show();
            // запускаем все это добро
            System.Windows.Forms.Application.Run(form1);
        }
        
        
        // Метод срабатывания таймера
                // *************************************
        private void onTimerTick(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            timer1.Stop();
            MessageBox.Show("sdfsdf");
            timer1.Enabled = true;
            timer1.Start();
        }
    }
}


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

Автор: mrbrooks 14.10.2010, 08:01
А зачем службе форма с таймером? smile Где такое подсмотрел? 

Цитата(puZzo @  14.10.2010,  04:32 Найти цитируемый пост)
но где и как это настроить?

installutil.exe 
sc.exe
net.exe

Написание на SharpDevelop определенно не освобождает от чтения MSDN.

Автор: puZzo 14.10.2010, 10:46
Цитата(mrbrooks @ 14.10.2010,  08:01)
Написание на SharpDevelop определенно не освобождает от чтения MSDN.

Полностью согласен и уже исправился=)

забил на форму, таймер запустил System.Timers.Timer а не System.Windows.Forms.Timer.
проблему прав решил в ProjectInstaller.cs

serviceProcessInstaller.Account = ServiceAccount.LocalSystem;

=)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)