在控制台app /中测试的c#代码将无法在服务中工作

本文关键字:工作 服务 代码 控制台 app 测试 | 更新日期: 2023-09-27 18:17:48

我用c#编写了这段代码,它作为一个控制台应用程序工作。但是,当我将代码转换为服务应用程序并使用installutil进行安装时,我无法使其正常工作。此外,控制台不会弹出。将Console.ReadLine ();不参加服务项目?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using MySql.Data.MySqlClient;
using FAXCOMLib;
using FAXCOMEXLib;
namespace ProcessFaxes
{
    public partial class Service1 : ServiceBase
    {
    public Service1()
    {
        InitializeComponent();
    }
    public static Timer timer = new Timer();
    protected override void OnStart(string[] args)
    {
        timer.Elapsed += new ElapsedEventHandler(Tick);
        timer.Interval = 5000; // every 5 seconds
        timer.Enabled = true;
        Console.ReadLine();
     }
    protected override void OnStop()
    {
    }
    public static void Tick(object source, ElapsedEventArgs e)
    {
        string connString = "Server=localhost;Port=3306;Database=communications;Uid=myuser;password=mypass;";
        MySqlConnection conn = new MySqlConnection(connString);
        MySqlCommand command = conn.CreateCommand();
        MySqlConnection connupdate = new MySqlConnection(connString);
        MySqlCommand commandupdate = connupdate.CreateCommand();
        command.CommandText = "SELECT * FROM outbox WHERE `faxstat` = 'Y' AND `fax` <> '' AND `faxpro` = 'PENDING'";
        //command.CommandText = "UPDATE blah blah";
        //conn.Open();
        //conn.ExecuteNonQuery();
        //conn.Close();
        try
        {
            conn.Open();
            connupdate.Open();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        MySqlDataReader reader = command.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine(reader["filepath"].ToString());
                SendFax(reader["id"].ToString(), reader["filepath"].ToString(), @"C:'FAXDOC'" + reader["filepath"].ToString(), reader["account"].ToString(), reader["fax"].ToString());
                string id = reader["id"].ToString();
                commandupdate.CommandText = "UPDATE outbox SET `faxpro` = 'DONE' WHERE `id` = '" + id + "'";
                commandupdate.ExecuteNonQuery();
            }
        }
        conn.Close();
        connupdate.Close();
    }
    public static void SendFax(string DocumentId, string DocumentName, string FileName, string RecipientName, string FaxNumber)
    {
        if (FaxNumber != "")
        {
            try
            {
                FAXCOMLib.FaxServer faxServer = new FAXCOMLib.FaxServerClass();
                faxServer.Connect(Environment.MachineName);

                FAXCOMLib.FaxDoc faxDoc = (FAXCOMLib.FaxDoc)faxServer.CreateDocument(FileName);
                faxDoc.RecipientName = RecipientName;
                faxDoc.FaxNumber = FaxNumber;
                faxDoc.BillingCode = DocumentId;

                int Response = faxDoc.Send();

                faxServer.Disconnect();
            }
            catch (Exception Ex) { Console.WriteLine(Ex.Message); }
        }

    }
}

}

我删除了Console.ReadLine();mysql正在工作,也在更新,但现在SendFax()不工作。没有任何传真正在发送到传真控制台。

在控制台app /中测试的c#代码将无法在服务中工作

服务本质上不能与用户界面交互,所以你不能在没有实现一些工作的情况下从服务打开窗口等。

服务是在后台执行的,不是交互式的,因此是控制台。

是控制台。ReadLine在服务代码中不起作用。当您为服务编写代码时,我建议您对其进行划分,使代码的主要部分进入您在服务和控制台应用程序中同时使用的动态库。控制台应用程序用于测试。服务代码不能执行任何类型的用户交互