Win7 64bit에서 Windows Service를 대상으로 아래처럼 C# 코드를 사용하면,(일반 WinForm은 아래코드가 먹힘)

string fullpathFile = System.IO.Directory.GetCurrentDirectory() + "\\" + "Log\\";

결과는 C:\Windows\SysWOW64\Log  이다.

------------------------------------

Windows Service를 대상으로 아래처럼 C# 코드를 사용해야, Service의 exe파일이 있는 폴더가 제대로 나옴.

string fullpathFile = AppDomain.CurrentDomain.BaseDirectory + "\\" + "Log\\"; 

 


 

출처: http://mvcp.tistory.com/entry/C에서-실행되는-폴더-알아-내기-윈도우-서비스-테스트-프로젝트

 

 

C#에서 실행되는 폴더 알아 내기(윈도우 서비스, 테스트 프로젝트, ...)

 

참조 URL
  1. http://stackoverflow.com/questions/1658518/getting-the-absolute-path-of-the-executable-using-c

 

 

 

 

 

윈도우 서비스나 테스트 프로젝트에서 실행을 하면 내가 코딩한 DLL이 위치하는 폴더와 실제 실행되는 프로세스의 위치가 상이한 경우가 발생할 수 있다. 이럴경우 기대한 경과와 다르게 에러가 발생할 수 있다. 예로 파일을 읽어 오는 부분이나 환경설정을 읽어 오는 부분에서 경로가 맞지 않아 에러가 발생할 수 있다. 아래 코드와 같이 실행되는 프로세스나 어셈블리의 위치를 알아 내는 방법이 몇가지로 제공을 하고 있다.

 

 

var path1 = Environment.CurrentDirectory; var path2 = Directory.GetCurrentDirectory();
var path3 = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName; var path4 = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); var path5 = Thread.GetDomain().BaseDirectory; var path6 = AppDomain.CurrentDomain.BaseDirectory;

[코드1] 폴더 위치 가져오기


위 "코드1"에서와 같이 폴더를 알아 낼 수 있지만 path1과 path2는 실행되는 프로세스를 중심으로 폴더를 알아내고 path3 ~ path6은 어셈블리를 기준으로 폴더를 알아내는 구조로 되어 있다.

 

 

위와 같은 코드를 윈도우 서비스에서 실행하면 아래와 같은 폴더의 위치가 달라지게 된다.

 

path1 : C:\Windows\System32

path2 : C:\Windows\System32

path3 : C:\User\xxxx\Visual Studio\Project\xxxx

path4 : C:\User\xxxx\Visual Studio\Project\xxxx

path5 : C:\User\xxxx\Visual Studio\Project\xxxx

path6 : C:\User\xxxx\Visual Studio\Project\xxxx

 

 

위와 같이 값을 확인 할 수 있을 것이다.

 

필요에 따라 값을 가져오는 방법을 달리 하여 가져오면 될 것이다.

 

 

 

 

 

'Programming > C#' 카테고리의 다른 글

[펌] 효과적인 C# 메모리 관리 기법  (0) 2016.03.10
C# delegate & event 작성순서- 20150604  (0) 2015.10.21
[펌] [STAThread]  (0) 2015.09.02
Posted by 세모아
,