2011-12-14 7 views
0

私はこのコードをC#で書いており、コンソールアプリケーションとして動作します。しかし、コードをサービスアプリケーションに転送してinstallutilを使用してインストールすると、それを動作させることができません。また、コンソールがポップアップしません。 Will Console.ReadLine();サービスプログラムでは動作しませんか?コンソールアプリケーションでC#コードをテストしました/サービスで動作しません

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); } 
     } 



    } 
} 

}

[OK]を、私は)(Console.ReadLineを除去します。 mysqlは動作していて更新中ですが、SendFax()は動作しません。ファックスコンソールに送信されるファックスはありません。

+1

おそらく、OnStart()のConsole.ReadLine()ですか? – antlersoft

+0

Console.ReadLine()を削除しました。 mysqlは動作していて更新中ですが、SendFax()は動作しません。ファックスコンソールに送信されるファックスはありません。私はコンソールアプリケーションとしてそれをテストしたときにうまくいきました。 –

答えて

2

サービスは本質的にユーザーインターフェイスとやりとりすることができないため、いくつかの回避策を実装せずにサービスからウィンドウなどを開くことはできません。

+0

あなたはコンソールと思いますか?コードが私のコードが動作しないようにすることができますか? –

+0

はい、ConsoleオブジェクトはUser Interfaceコンポーネントですので、Console.Read/Write呼び出しがある場合、サービスは機能しません。必要に応じて、システムログにログを記録したり、エントリをファイルに書き込んだりすることができます。 – Bueller

0

サービスはバックグラウンドで実行され、インタラクティブではないため、console.readは機能しません。

0

はいConsole.ReadLineはサービスコードでは機能しません。サービスのコードを書くときには、コードの主要部分が、サービスとコンソールアプリケーションの両方で使用する動的ライブラリに入るように分割することをお勧めします。コンソールアプリケーションはテストのためのものです。サービスコードは、ユーザーとのやりとりを一切行わないでください。

関連する問題