윈도우 서비스 구현에서 파일을 참조할 때 주의사항

응용프로그램에서 파일을 참조하게 되면 먼저 실행파일이 존재하는 디렉터리에서 검색하고, 하위 폴더를 검색합니다. 그 위치에 없는 경우 %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.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다