0

Windowsサービスsyncmysqldb.exeで作業しています。プロセスを実行するサービスが必要です。つまり、setting.xmlファイルで指定された時間間隔で2つのmysqlデータベースを同期します

このサービス サービス マネージャーをインストールすると、サービスが開始されていないことがわかります。右クリックして手動で実行しようとすると、次のエラーが表示されます。

サービスをインストールすると、次のエラーが表示 されます ソース ( MsiInstaller ) のイベント ID ( 11001 ) の説明が見つかりません。ローカル コンピュータに、リモート コンピュータからのメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがない可能性があります。/AUXSOURCE= フラグを使用して、この説明を取得できる場合があります。詳細については、ヘルプとサポートを参照してください。次の情報はイベントの一部です: 製品: SetupSynMysqldb -- エラー 1001. エラー 1001. インストールのコミット フェーズ中に例外が発生しました。この例外は無視され、インストールが続行されます。ただし、インストールの完了後、アプリケーションが正しく機能しない場合があります。--> savedState ディクショナリに一貫性のないデータが含まれており、破損している可能性があります., (NULL), (NULL), (NULL), (NULL), .

サービスマネージャーでサービスを実行する と、次のエラーが表示されます。次のエラーにより、SyncMysqlDb サービスを開始できませんでした: 指定されたファイルが見つかりません。

C# コード

 protected override void OnStart(string[] args)
            {
                try
                {
                    //add this line to text file during start of service

                    EventLog.WriteEntry("SyncMysqlDb in OnStart. at " + DateTime.Now);
                    //handle Elapsed event
                    tmrSync.Elapsed += new ElapsedEventHandler(OnElapsedTime);



                    tmrSync.Interval = GetIntervals();

                    //enabling the timer
                    tmrSync.Enabled = true;
                    //TraceService(" tmrSync.Interval =" + tmrSync.Interval + " at " + DateTime.Now);
                    ThreadPool.QueueUserWorkItem(new WaitCallback(ServiceWorkerThread));
                }
                catch (Exception ex)
                {

                    EventLog.WriteEntry("Service failed to start.", EventLogEntryType.Error, (int)Service1EventIds.Start_InitializationFailure, ex);
                }
            }
private void ServiceWorkerThread(object state)
        {
            // Periodically check if the service is stopping.
            while (!this.stopping)
            {
                // Perform main service function here...

                Thread.Sleep(2000);  // Simulate some lengthy operations.
            }

            // Signal the stopped event.
            this.stoppedEvent.Set();
        }
        protected override void OnStop()
        {
            tmrSync.Enabled = false;
            //TraceService("stopping service" + DateTime.Now);
            EventLog.WriteEntry("SyncMysqlDb in OnStop. at " + DateTime.Now);
            this.stopping = true;
            this.stoppedEvent.WaitOne();
        }
        private void OnElapsedTime(object source, ElapsedEventArgs e)
        {

            try
            {
                EventLog.WriteEntry(@"Executing C:\SyncMysqlDbRepository\task.bat at " + DateTime.Now);
                Process.Start(@"C:\SyncMysqlDbRepository\task.bat");
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Service failed to start.at " + DateTime.Now, EventLogEntryType.Error, (int)Service1EventIds.Start_InitializationFailure, ex);

            }
           // TraceService("syncing db at " + DateTime.Now);
        }
        protected int GetIntervals()
        {
            var dt = new DataTable();
            try
            {

                dt.ReadXmlSchema(@"C:\SyncMysqlDbRepository\SettingsDs.xml");
                dt.ReadXml(@"C:\SyncMysqlDbRepository\Settings.xml");

            }
            catch (Exception ex)
            {

                 EventLog.WriteEntry("GetIntervals  failed at " + DateTime.Now, EventLogEntryType.Error, (int)Service1EventIds.Start_InitializationFailure, ex);
                return 0;
            }
            return Convert.ToInt16(dt.Rows[0].ItemArray[2]); //Intervals from settings.xml
        }
4

0 に答える 0