2017-03-23 1 views
0

내 AppData 폴더에서 프로그램을 시작하는 소프트웨어를 만들었습니다.C#에서 동적 경로로 프로그램 시작하기

그러나 내가하고 싶었던 것은 그것이 동적 인 경로로 달리는 것입니다.

내가 사용하는 현재의 경로는 다음과 같습니다

new ProcessStartInfo(@"C:\Users\user\AppData\Local\SOFTWAREPROGRAM\File\program.exe") 

나는 그것이 그러나 단지 '사용자'에 있지만의 AppData 폴더가 모든 사용자에서 실행되지하는 것을 가능하게합니다. 나는 디렉토리에서 탐색 할 때 작동하는 다음 경로를 시도했다.

new ProcessStartInfo(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe") 

그러나이 '파일을 찾을 수 없음'오류가 발생합니다.

어떻게 수정하나요? 다른 사용자들과 함께 작업하고 싶습니다.

편집

대답은 내 프로그램에서 작동하지만 개발하기 위해 노력하고있어 서비스에서 작동하지 않습니다. 나는 시도했다 :

(답)

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe")) 

이 아닌 서비스에서 프로그램 (콘솔 프로젝트)에서 작동
string folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string specificFile = Path.Combine(folder, @"\Local\SOFTWAREPROGRAM\File\program.exe"); 

ProcessStartInfo(specificFile) 

. 왜 이런거야?

I의 출력 specificFile 것은 실행하지만 그것은 단지 \Local\SOFTWAREPROGRAM\File\program.exe

+2

가능한 복제 [i는 현재 사용자의 "응용 프로그램 데이터"폴더의 경로를 얻을 수있는 방법은?] (http://stackoverflow.com/questions/915210/how-can-i-get-the- current-users-application-data-folder 경로) – ASh

+2

Environment.ExpandEnvironmentVariables를 통해 문자열을 실행하십시오. –

+0

해당 폴더의 의도는 응용 프로그램 자체가 아닌 응용 프로그램 데이터를 저장하는 것입니다. – Crowcoder

답변

3

당신은 환경 변수의 실제 경로를 얻을 수 Environment.ExpandEnvironmentVariables 방법을 사용할 수 있습니다 포함되어있다.

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe")) 
+0

대단히 감사합니다! –

+0

Pavel, 내 서비스에서 코드를 편집했지만 서비스에서 작동하지 않는 것 같습니다. –

+0

서비스를 실행하기 위해 사용하는 계정은 무엇입니까? 일반적으로 서비스는 특별 시스템 계정 (예 : 로컬 서비스 또는 네트워크 서비스. 그러나 Windows 계정을 지정하여 실행할 수 있습니다. – Pavel