多数の記事を検索し、この問題を解決するいくつかの異なる方法を試しました。
このプロセスは、まったく同じコードのコンソール アプリまたは Windows アプリで正常に機能することに注意してください。したがって、ロジックに問題はありません。これは、Windows サービスがこれらのファイルを処理する方法であり、何らかの形で後続のファイルを通過させていません。
実際にサービスをデバッグするための簡単な記事を読んでみましたが、Visual Studio 2010 を使用して [デバッグ] メニューの下に [プロセスにアタッチ] が選択されていません。 http://msdn.microsoft.com/en-us/library/ 7a50syb3(v=vs.100).aspx
私の選択肢が本当になくなったので、ここで本当に助けが必要です。
簡単なシナリオを次に示します。ローカル マシンでファイルを処理する別のメソッドを開始する OnStart メソッドに FileSystemWatcher があります。これらは単なる txt ファイルです。最初のファイルが処理されると、すべてが正常になり、イベント ログに次のように記録されます。
後続のファイル (形式はまったく同じですが、日付が異なる名前) を処理しようとすると、イベント ログに次のように表示されます。 .txt'は別のプロセスで使用されているためです。
ファイルは、作成時にこの同じディレクトリで監視されることに注意してください。
これが私のWindowsサービスのコードです。誰かがこの問題を解決する方法を教えてもらえますか? e.FullPath は、ローカル マシンでは "C:\Projects\Data\VendingStats" と評価されることに注意してください。
public partial class VendingStatsService : ServiceBase
{
public VendingStatsService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
FileSystemWatcher Watcher = new FileSystemWatcher(@"C:\Projects\Data\VendingStats");
Watcher.EnableRaisingEvents = true;
Watcher.Created += new FileSystemEventHandler(**Watcher_Created**);
Watcher.Filter = "*.txt";
Watcher.IncludeSubdirectories = false;
}
private void Watcher_Created(object sender, FileSystemEventArgs e)
{
try
{
using (TextReader tr = new StreamReader(e.FullPath))
{
// code here to insert data from file into a DB
}
Dispose();
}
catch (Exception ex)
{
EventLog.WriteEntry("VendorStats", "Error in the Main:" + "\r\n\r\n" + ex.Message + "\r\n\r\n" + ex.InnerException);
return;
}
}
public void Dispose()
{
GC.Collect();
}