2011-03-16 4 views
5

로컬 서버의 디렉터리 (예 : C : \ Watch)를 모니터링하는 Windows Server 2008 서버에서 Windows 서비스를 실행하고 해당 디렉터리에 새 pdf가 만들어지면 파일을 네트워크로 복사합니다. share (즉, //192.168.1.2/Share).Windows 서비스에서 네트워크 위치로 파일을 복사하는 방법은 무엇입니까?

서버 중 하나도 도메인의 구성원이 아닙니다.

Windows 서비스는 // 서버/공유에 액세스하고 아무런 파일도 만들지 않고 삭제할 수있는 로컬 사용자 계정으로 설정하여 로그온합니다.

sourceDir 및 destDir이 C : \ Source 및 C : \ Dest와 같은 로컬 폴더이지만 destDir을 // server/share/또는 //와 같은 네트워크 위치로 변경하면 제대로 작동하는 경우가 있습니다. // server // share // "파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 잘못되었습니다."라는 오류 메시지가 나타납니다.

업데이트 : 나는 더 이상 위의 오류가 발생하고 있어요 지금은 SOURCEDIR이 C로 설정된 경우 : \ 시계와 서버가 Windows 또는 우분투 수 있습니다 서버 \ 공유 \을 (\로 설정 DESTDIR 서버 대상 서버에서 오는 것으로 가정하는 System.UnauthorizedAccess 오류가 발생합니다. 대상 서버에 연결할 때 사용할 자격 증명을 설정하는 방법은 무엇입니까? 서버가 도메인에 없으며 Windows 또는 Ubuntu가 될 수 있습니다.

public partial class Service1 : ServiceBase 
{ 
    private FileSystemWatcher watcher; 
    private string sourceFolder; 
    private string destFolder; 

    public Service1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     this.sourceFolder = Properties.Settings.Default.sourceDir; 
     this.destFolder = Properties.Settings.Default.destDir; 

     watcher = new FileSystemWatcher(); 
     watcher.Path = this.sourceFolder; 
     watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
     watcher.Filter = "*.pdf"; 

     watcher.Created += new FileSystemEventHandler(watcher_Created); 

     watcher.EnableRaisingEvents = true; 
    } 

    protected override void OnStop() 
    { 
    } 

    private void watcher_Created(object source, FileSystemEventArgs e) 
    { 
     FileInfo fInfo = new FileInfo(e.FullPath); 
     while (IsFileLocked(fInfo)) 
     { 
      Thread.Sleep(500); 
     } 
     System.IO.File.Copy(e.FullPath, this.destFolder + e.Name); 
     System.IO.File.Delete(e.FullPath); 
    } 
} 

답변

4

서버 점유율은 다음과 같습니다

string networkShare = @"\\ServerName\Share\"; 

서비스가 실행중인 ID가 서비스가 해당 위치에 저장할 수 있는지 여부에도 영향을 미칩니다. 서비스가 실행되도록 도메인 서비스 계정을 사용하는 경우 쓰기가 허용되는 공유 컴퓨터의 대상 공유 폴더에 대한 ACL을 조정해야합니다.

+0

감사합니다. @ "\\ server \ share \"하드 코드 된 있지만 이제 "시스템에서 파일을 액세스 할 수 없습니다"오류가 발생합니다. 그래서 내가 비록 \\ 서버 \ 공유에 파일을 만들 수있는 서비스로 로그온하도록 설정된 사용자로 로그인했을 때도 권한이있는 것 같아요 – etoisarobot

+0

사이드 노트에서 어떻게 @ 경로가 문자열 변수 인 경우 \\ server \ share \ "입니다. – etoisarobot

+0

app.config에 대상을 저장하고 거기에서 읽을 수 있습니다. app.config에서 \\ server \ share 만 필요합니다. – kd7

1

Oded의 대답을 기반으로합니다. here 일단 원격 우분투 서버에서 설정 한 로컬 사용자로서의 서비스는 모두 매력처럼 작동했습니다.

+1

큰 성공을 거두었습니다. 자신의 대답을 수락대로 표시하거나 내 다른 사람들도 혜택을 볼 수 있습니다. – kd7

관련 문제