2012-06-26 13 views
5

c:\Program Files\My Service 디렉토리에 설치된 Windows 서비스를 만들었습니다. 실행 파일과 함께, 나는 동일한 디렉토리에 설치되는 XML 파일을 가지고있다. 이 XML 파일은 서비스에서 사용자 정의 정보를 얻는 데 사용됩니다. 그것을 실행 .. 예를 들어 로컬 인 것처럼 내가 파일을 읽을 서비스의 코드에서 Windows 서비스에서 텍스트 파일을 읽는 방법은 무엇입니까?

:

: 나는 서비스를 실행할 때

DataSet ds = new DataSet(); 
ds.ReadXml("Foo.xml"); 

는 서비스가 말하는 예외가 발생합니다

파일을 찾을 수 없습니다 'C를 : \ WINDOWS를 \ system32를 Foo.xml \'c:\Program Files\My Service에서 실행 생활 때문에 나는 윈도우 빼앗아 예상

vice는 c:\Program Files\My Service\Foo.xml에있는 XML 파일을 찾습니다. 분명히 그렇지 않습니다.

서비스 실행 파일이있는 동일한 위치의 Foo.xml 파일에 대해 서비스가 (상대적으로) 보이게하려면 어떻게해야합니까? Windows 서비스 작업 디렉토리로

System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Foo.xml"); 
+0

가능한 중복을 할 필요가 [나는 C#을 사용, Windows 서비스의 설치 디렉토리를 어떻게 찾을 수 있습니까?] (HTTP ://stackoverflow.com/questions/491735/how-do-i-find-the-install-directory-of-a-windows-service-using-c) –

+1

그냥 고려해 볼 수 있습니다. * 구성 가능한 응용 프로그램 설정을 이 경로를 수정하기위한 액세스 권한으로 프로그램 파일 디렉토리에 권한이 필요합니다. 대신'ApplicationData' /'LocalApplicationData' 사용을 고려하십시오. –

+0

@QuintinRobinson - 알림을 보내 주셔서 감사합니다! +1 – Jed

답변

10

사용이 필요 무엇을 얻을 것이다. 예상대로 XML 파일을 읽기 위해서는

, 당신의 아래

DataSet ds = new DataSet(); 
ds.ReadXml(Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location, "Foo.xml")); 
0

이것은 당신이

DataSet ds = new DataSet(); 
ds.ReadXml(System.IO.Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location,"Foo.xml"); 
+1

... 사용자가 설치시 변경할 수있는 경로를 하드 코딩하지 않으려는 것을 제외하고는. –

+0

파일 경로를 하드 코딩하지 않으려합니다. 나는 파일에 대한 참조를 실행 파일에 상대적으로하고 싶다. – Jed

+0

더 이상 하드 코드되지 않도록 변경했습니다. –

0

는 C : \ WINDOWS \ system32를

관련 문제