конвертирование приложения win в сервис win - PullRequest
0 голосов
/ 24 марта 2011

Я использую этот пример http://www.codeproject.com/KB/cs/SMS.aspx, чтобы создать приложение, которое будет отправлять SMS на мобильный телефон.Когда я делаю GUI-приложение win, все работает нормально, но когда я пытаюсь преобразовать его в приложение-службу Windows (без графического интерфейса) для работы в фоновом режиме, оно говорит мне, что телефон не подключен.

Вот оба, очень просто, примеры:

Приложение с графическим интерфейсом

using System;
using System.Windows.Forms;
using GsmComm.GsmCommunication;
using GsmComm.PduConverter;

namespace SMS.Forms
{
    public partial class SendSMS : Form
    {
        SmsSubmitPdu pdu;
        private int port;
        private int baudrate;
        private int timeout;

        public SendSMS()
        {
            InitializeComponent();

            //phone connection
            port = 3;
            baudrate = 115200;
            timeout = 300;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            GsmCommMain comm = new GsmCommMain(port, baudrate, timeout);

            try
            {
                comm.Open();

                //send sms
                pdu = new SmsSubmitPdu("Test msg", "0xxxxxxxxx", "");
                comm.SendMessage(pdu);

                comm.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Connection error: " + ex.Message, "Connection setup", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            MessageBox.Show(this, "Successfully connected to the phone.", "Connection setup", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

Служба WIN

using System;
using System.Diagnostics;
using System.ServiceProcess;
using GsmComm.GsmCommunication;
using GsmComm.PduConverter;

namespace SMS
{
    public partial class SendSMS : ServiceBase
    {

        SmsSubmitPdu pdu;

        //logs
        private string sSource;
        private string sLog;
        private string sEvent;

        private int port;
        private int baudrate;
        private int timeout;

        public SendSMS()
        {
            InitializeComponent();

            //event logs
            sSource = "SendSMS";
            sLog = "SMS";
            if (!EventLog.SourceExists(sSource))
                EventLog.CreateEventSource(sSource, sLog);


            //phone connection
            port = 3;
            baudrate = 115200;
            timeout = 300;
        }

        protected override void OnStart(string[] args)
        {
            //logs
            sEvent = "SMS service started";
            EventLog.WriteEntry(sSource, sEvent);

            GsmCommMain comm = new GsmCommMain(port, baudrate, timeout);

            try
            {
                comm.Open();
                while (!comm.IsConnected())
                {
                    sEvent = "Phone not connected";
                    EventLog.WriteEntry(sSource, sEvent);
                    comm.Close();
                    return;
                }

                //send sms
                pdu = new SmsSubmitPdu("Test msg", "0xxxxxxxxx", "");
                comm.SendMessage(pdu);

                comm.Close();
            }
            catch (Exception ex)
            {
                sEvent = "Not done " + ex.Message;
                EventLog.WriteEntry(sSource, sEvent);
                return;
            }
            finally
            {
                comm.Close();
            }
        }

        protected override void OnStop()
        {
            //logs
            sEvent = "SMS service stopped";
            EventLog.WriteEntry(sSource, sEvent);
        }
    }
}

Когда я запускаю службу, она записывает «Телефон не подключен» в журнал событий.Есть идеи, что я делаю не так?Или, по крайней мере, как точно определить ошибку ...

Спасибо.

1 Ответ

0 голосов
/ 24 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...