2016-09-07 1 views
0

콘솔 응용 프로그램이 C#으로 작성되었으며 실행 결과를 로그 파일에 쓰고 싶습니다. 그것은 내가 Visual Studio에서 디버그 명령을 실행할 때 잘 작동하고 내 로그 파일이 생성되고 잘 작동 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)배포 된 .exe 파일이 실행되는 파일 작성

: 내 코드에서

실제로 나는이 경로를 사용합니다. 나는 많은 다른 구문과 그들 모두를 시도

난 내 응용 프로그램을 게시 할 때, 경로가 .EXE 실행하지만 내의 AppData 폴더의 로컬 경로가 아닌이 ... 디버그 모드에서 작동하지만 내 응용 프로그램을 배포 할 때가 아닙니다.

로컬 경로를 가져오고 싶습니다. 내 .exe가 여기에서 로그 파일을 작성하기 위해 실행됩니다. 감사.

Visual Studio와 함께 배포하면 간단하게 옵션을 게시 할 수 있습니다. 은 내가 setup.exe를하고 .application 파일

감사합니다,

+0

'Environment.CurrentDirectory'를 보셨습니까? – DarkSquirrel42

+0

@ DarkSquirrel42 그러면 반드시 실행 파일이 들어있는 폴더의 경로가 제공되지는 않습니다. 예를 들어, 응용 프로그램이 바로 가기에서 시작된 경우 해당 바로 가기에 설정된 작업 디렉토리가 무엇이든간에됩니다. –

+0

@ DarkSquirrel42 예, 배포 후 작동하지 않습니다 – Furtiro

답변

3

일반적으로 사용자는 설치된 exe와 같은 디렉토리에 파일을 쓸 수 없습니다. 디버깅 할 때 작동하지만 배포 한 후에는 작동하지 않습니다. 프로그램에 C : \ Program Files 디렉터리에 대한 쓰기 권한이 없습니다. AppData에서 어떻게 끝났는지는 추측하기가 어렵습니다. 프로그램에서 매니페스트를 의도적으로 제거해야하므로 OS가 UAC를 인식하지 못하는 레거시 XP 프로그램처럼 취급합니다. 흠.

음, 절대 가지 말고 Environment.GetFolderPath()를 사용하여 AppData 경로를 얻은 다음 설치 프로그램에서 해당 디렉토리를 만듭니다.

3

대신 입력 총회를 받고 시도 할 수 있습니다 (귀하의 경우에 당신이 실행 한 실행해야하는) 얻을.

var entryAssembly = Assembly.GetEntryAssembly(); 
var file = Path.Combine(
    Path.GetDirectoryName(entryAssembly.Location), 
    entryAssembly.GetName().Name + ".log"), 
+0

작동하지 않습니다. 내 애플리케이션을 배포하는 방법이 추가되었습니다. – Furtiro