4

ソケットを管理するツール ストリップ アイコンが作成されるフォームを作成する Windows サービスを作成しました。Visual Studio で作成したインストーラーを使用してインストールできますが、[サービス] に移動してサービスを開始すると、開始してすぐに停止したというエラーが表示されます。

サービスコードは次のとおりです。

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: フォームをテストしましたが、問題なく動作します。

4

2 に答える 2

1

私はこの問題を抱えていて、グーグルで何時間も検索した後、解決策を見つけました。コードに次のコードを追加できます。クラス コンストラクターを追加InitializeTimer()します。 SetoTimer.Enabled = trueoTimer.Start()onOnStart()oTimer.Stop()onを使用する必要があります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;
    }
于 2014-08-30T07:33:27.150 に答える