응용프로그램에서 파일을 참조하게 되면 먼저 실행파일이 존재하는 디렉터리에서 검색하고, 하위 폴더를 검색합니다. 그 위치에 없는 경우 %windir%\system32\
디렉터리를 검색하고 존재하지 않으면 FileNotFoundException 이 발생합니다.
그런데, Windows Service 에서 파일을 이름으로 검색하면 Windows Service 실행파일의 위치가 아니라 %windir%\system32\
디렉터리부터 검색을 시작하여 하위 디렉터리에 파일이 존재하지 않으면 FileNotFoundException 이 발생합니다.
Windows Service를 구현할 때, 파일을 이름으로 참조하지 말고 전체 경로를 사용하여 참조하는 것이 좋겠습니다.
아래 샘플코드의 file2와 같이 사용하길 권장합니다.
Windows Service 샘플코드
간단한 Windows Service 를 구현하고, Installer Project 로 설치 프로그램을 구현하여 설치한 후 실행합니다.
설치 위치는 %programfiles%\Company\SampleService\
입니다.
protected override void OnStart(string[] args)
{
string strAppConfigFilename = "SampleService.exe.config";
string strAppConfigFilePath = string.Empty;
strAppConfigFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
FileInfo file1 = new FileInfo(strAppConfigFilename);
FileInfo file2 = new FileInfo(Path.Combine(strAppConfigFilePath, strAppConfigFilename));
string strMessage = string.Empty;
strMessage = String.Format("file1.Exists : {0}\r\nfile1 path : {1}\r\nfile2.Exists : {2}\r\nfile2 path : {3}", file1.Exists, file1.FullName, file2.Exists, file2.FullName);
EventLog.WriteEntry(strMessage, EventLogEntryType.Information);
}
이벤트 뷰어 내용
file1.Exists : False file1 path : C:\Windows\system32\SampleService.exe.config file2.Exists : True file2 path : C:\Program Files\Company\SampleService\SampleService.exe.config
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.