이전에 이와 거의 같은 내용의 포스팅을 한 적이 있다.

나도 물론 그때 포스팅 한 내용을 그대로 썼었는데 자꾸 오류가 발생하는 것이었다.

뭐가 문제인가 해서 test하는 프로그램을 만들어서 직접 실험하여 결과를 올려본다.

혹시 나와 비슷한 고민을 한 분이 이리저리 방황하다 이 포스팅을 보게된다면, 이 글을 통해 많은 도움이 되기를 잠시 바래본다.

우선 프로그램 이름은 StartTest이고 시작 위치는 테스트를 쉽게 하기 위해 "C:\StartTest.exe"에 놔두었다.
인터넷에서 경로를 받아오는 법이 여러 개 있길래 동시에 돌려본 것이다.
이해를 쉽게하기위해 앞에 메소드 이름 그대로 인덱스도 넣었다.

1. 그냥 실행시
사용자 삽입 이미지

그냥 실행시에는 보다시피 아무 문제가 없다.

 그냥 실행시에는 밑에 보이는 것 처럼 아무 문제없이, 의도한 대로 실행되는 것을 알 수 있다(대조군).

2. 윈도우 시작시 시작프로그램에 바로가기를 넣어놔서 실행될 때
사용자 삽입 이미지

시작프로그램에 있던 바로가기에 의해 실행된 경우에도 아무 문제 없다.

 바로가기에 의해 실행된 경우에도 아무 문제 없음을 알 수 있다(so far, so good).

But!!!

3. 윈도우 시작시 레지스트리를 이용하여 실행될 때
레지스트리 경로는 이 블로그의 다른 포스팅에 나와있다.
사용자 삽입 이미지

윈도우가 시작될 때 레지스트리를 통해 실행되는 경우 결과값이 다른 것을 알 수 있다.

봐서 알겠지만 뭔가 다르다는 것을 알 수 있다(참고로 Admin은 내 계정명이다).

솔직히 이유는 잘 모르겠다.
마음속에 짐작이 가는게 몇개 있긴 하나 잘 알지도 못하면서 공개적인 곳에 사실인냥 써놓을 수는 없으므로, 이유에 대해선 설명하진 않겠다
혹시 아는 분이 계시다면 댓글이나 방명록에 남겨놔서(even though secretly!) 알려주면 정말 고맙겠다.

따라서 C# 프로그램 내에서 프로그램이 속해있는 폴더 경로를 받아오려면 Application을 위주로 사용하는 것이 좋을 듯 싶다(게다가 파일 이름을 붙였다 떼었다 할 수도 있다!).

ps. 한가지 안타까운 점은 Application은 System.Windows.Forms를 이용하므로 콘솔에서는 아마 못쓸 것이다(따라서 콘솔에선 모르겠다-_-).

%% 네줄요약 %%
C#으로 코딩할 때 프로그램 경로가 필요한데, 하필 그 때가 윈도우 시작이라면 Application.___Path 위주로 사용하는 것이 좋다(중간중간에 받아오는 경우라면 아마 문제없을것이다).
이게 싫으면 시작프로그램에 shortcut을 넣던가 절대경로로 하던가 실행시켜주는 넘을 만들어라.
만약 윈폼이 아닌 콘솔이라면 니 앞가림은 니가 알아서해라-_-

//출처 : 데브펌 + 내 실험
Posted by 병아리
이 글보다는 현재 실행중인 프로그램의 절대경로 받아오기 in C# 를 참고하기를 추천합니다!

1. 확장자를 제외한 프로세스 이름 가져오기
System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
String s = currentProcess.ProcessName;

2. 현재 실행되고 있는 프로그램 디렉토리
String strFolder = System.IO.Directory.GetCurrentDirectory();

이 둘을 합치면 완전체는

System.IO.Directory.GetCurrentDirectory() + "\\" + this.currentProcess.ProcessName + ".exe"

// 출처 : 데브펌
Posted by 병아리

사이드바 열기