2017-05-22 6 views
0

FileWatcherクラスを使用してWindowsサービスを構築しました。フォルダ内の着信ファイルを検出し、新しい場所に移動する必要があります。Windowsサービスが期待どおりに動作しない - C#

私のコードはコンソールアプリケーションとして正常に動作していますが、Windowsサービスとしては機能していません。ファイルはソースフォルダにのみ保存されています。彼らは宛先に移動していません.LOCAL SYSTEMアカウントで実行されているフォルダとサービスにフルアクセスできました。エラーを指摘してください。前もって感謝します。

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.Threading.Tasks; 
using System.IO; 

namespace WindowsService1 
{ 
    public partial class Service1 : ServiceBase 
    { 
     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      bulk_watch(); 
     } 

     public static void bulk_watch() 
     { 
      FileSystemWatcher watcher = new FileSystemWatcher(); 
      watcher.Path = @"C:\Users\ADMIN\Downloads\FW_Source";    
      watcher.NotifyFilter = NotifyFilters.LastWrite;  
      watcher.Filter = "*.*";        
      watcher.Changed += new FileSystemEventHandler(OnChanged); 
      watcher.EnableRaisingEvents = true; 

     } 

     public static void OnChanged(object sender, FileSystemEventArgs e) 
     { 


      DirectoryInfo directory = new DirectoryInfo(@"C:\Users\IBM_ADMIN\Downloads\FW_Source"); 
      FileInfo[] files = directory.GetFiles("*.*"); 
      foreach (var f in files) 
      { 

       File.Move(f.FullName, System.IO.Path.Combine(@"C:\Users\ADMIN\Downloads\FW_Dest", Path.GetFileName(f.FullName))); 

      } 

     } 

     protected override void OnStop() 
     { 



     } 
    } 
} 
+0

何が問題なのですか? Windowsサービスをデバッグしようとしましたか?何がうまくいかないかの詳細を記入してください。 –

+3

アクセス権が不十分ですC:\ Users \ ADMIN? – duDE

+0

ハエは目的地まで移動していません。ファイルはソースフォルダ – METALHEAD

答えて

0

Windowsサービスは、デフォルトで(インストール時に別のアカウントを指定しない限り)LocalSystemアカウントで実行されます。このアカウントに両方のフォルダへのアクセスを許可する必要があります。

+0

こんにちは。ローカルシステムの下でWindowsサービスを実行していて、フルアクセス権もフォルダに与えられていました。 – METALHEAD

0

は、ユーザー名とパスワードを使用してサービスを作成するには、次のコマンドを使用します。

sc create "ServiceName" binPath= "G:\services\service.exe" DisplayName= "ServiceName" start= "auto" obj= "username" password= "password" 

Repace: ServiceNameは、exeファイルの場所、表示名、ユーザ名とパスワードを入力します。

+0

こんにちは。ご意見ありがとうございます。上記のプログラムがUserIDとPasswordなしで実行できる方法はありますか? – METALHEAD

+0

フォルダの場所が管理者のプライベートフォルダの場所であるため、このシナリオでは取得できないファイルにアクセスするには、サービスに十分なアクセス許可が必要です。ファイルの場所を一般的なドライブ(Cドライブ以外)に移動するか、管理者のユーザー名とパスワードを使用することができます。 –

+0

コンソールアプリケーションとして実行しているときは、そのユーザー名を使用してファイルにアクセスしているため、その時点で動作しています。 –

関連する問題