2016-06-22 2 views
2

アプリケーションのサービスを初めてセットアップしたときは、Microsoft websiteのステップバイステップに従いました。ウェブサイトの指示に従ってeventLog1を作成するには、デザインビューに移動し、イベントログをドラッグしてサービスにドロップしました。そこから、ソースとログを追加する方法に従ったが、アプリケーションを実行すると、「ソースプロパティがイベントログに書き込む前に設定されていない」という状態が続きます。これらを作成するより良い方法はありますか?イベントログの外側では、サービスが正しく実行されます。コンストラクタFGLFileTransferService()サービスのイベントログで、ソースが設定されていないことを示すエラーが発生しました

public FGLFileTransferService() 
    { 
     eventLog1 = new System.Diagnostics.EventLog(); 
     if (!EventLog.SourceExists("FGLTransferServiceSource")) 
     { 
      EventLog.CreateEventSource("FGLTransferServiceSource", "FGLTransferServiceLog"); 
     } 
     eventLog1.Source = "FGLTransferServiceSource"; 
     eventLog1.Log = "FGLTransferServiceLog"; 
     InitializeComponent(); 
    } 

    public void OnDebug() 
    { 
     OnStart(null); 
    } 

    protected override void OnStart(string[] args) 
    { 
     eventLog1.WriteEntry("Service Start"); 
     Timer timer = new System.Timers.Timer(); 
     //timer.Interval = 1; 
     timer.Elapsed += OnTimer; //new System.Timers.ElapsedEventHandler(this.OnTimer); 
     timer.Start(); 

    } 

スタックトレース

at System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) 
    at System.Diagnostics.EventLog.WriteEntry(String message) 
    at FGLFileTransfers.FGLFileTransferService.OnStart(String[] args) in C:\Users\brandon_paxton\Documents\Visual Studio 2015\Projects\FGLFileTransfers1.2\FGLFileTransfers\FGLFileTransferService.cs:line 42 
    at FGLFileTransfers.FGLFileTransferService.OnDebug() in C:\Users\brandon_paxton\Documents\Visual Studio 2015\Projects\FGLFileTransfers1.2\FGLFileTransfers\FGLFileTransferService.cs:line 37 
    at FGLFileTransfers.Program.Main(String[] args) in C:\Users\brandon_paxton\Documents\Visual Studio 2015\Projects\FGLFileTransfers1.2\FGLFileTransfers\Program.cs:line 26 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
+0

私はあなたがコンストラクタの最初としてのInitializeComponent()を呼び出しだけにして、あなたの値を設定しなければならないと思います。それを試してみてください。 – pijemcolu

+0

キリスト..ありがとう。私はそれをあまりにも長いこと考えて、私は何か間違ってイベントログを設定した – paxtuik

答えて

0

InitializeComponent()を呼び出し、唯一のあなたは、独自の値を設定することができます後の最初の。それ以外の場合は上書きされます。

ソリューションは、次のようになります。

public FGLFileTransferService() 
    { 
     // *** replaced this 
     InitializeComponent(); 
     // *** replaced this 
     eventLog1 = new System.Diagnostics.EventLog(); 
     if (!EventLog.SourceExists("FGLTransferServiceSource")) 
     { 
      EventLog.CreateEventSource("FGLTransferServiceSource", "FGLTransferServiceLog"); 
     } 
     eventLog1.Source = "FGLTransferServiceSource"; 
     eventLog1.Log = "FGLTransferServiceLog"; 
      } 
関連する問題