2013-12-18 5 views
0

다른 DLL ('B'및 'C')을 참조하는 dll ('A')을 참조하는 C# 서비스 응용 프로그램이 있습니다. 서비스 프로젝트는 필요한 모든 dll을 참조합니다.서비스가 참조 된 DLL을 찾을 수 없습니다.

엔트리 코드는 'B'또는 'C'의 메소드를 호출하는 'A'의 메소드를 호출합니다. 서비스와 동일한 폴더에 'B'와 'C'를 찾을 수 없다는 'A'의 사용자 정의 오류 메시지가 표시되고 을 알면이 프로세스가 작동하고 있음을 나타냅니다. 폴더가 잘못되었습니다 (즉, 프로세스가 작업 폴더를 다른 위치라고 생각합니다).

질문 : 어떻게하면 작업 폴더가 무엇인지 명시 적으로 서비스에 알릴 수 있습니까?

TIA

+1

서비스를 어떻게 호스팅합니까? – nvoigt

답변

3

Services run in System32.

B.dll 및 C.dll을 System32 폴더에 복사하면 아마 작동 할 것입니다.

해결하려면 솔루션에서 설치 프로그램 프로젝트를 만들어야합니다. 설치 프로그램은 필요한 모든 .dll을 올바른 위치에 설치하는 것을 처리합니다.

Here's a SO example

편집 # 1 :

This post은 퍼즐의 마지막 조각이있다. Dll은 원본 프로젝트와 별도로 설치 프로젝트에 추가해야합니다.

+0

내가 언급 했어야 - 나는 서비스를 설치하는 데 사용되는 설치 프로그램 및 설치 및 배포 프로젝트가 있고 dll은 실제로 서비스 실행 폴더에 있습니다. 그러나 그것들을 찾을 곳은 아직도 혼란스러워 보입니다. –

+0

@NeilHaughton이 (가) 내 글을 편집했습니다. 내 컴퓨터에서 테스트 할 수는 없지만 설치 프로젝트에 .dll을 수동으로 추가해야합니다 (자동으로 수행하지는 않습니다). 도움이되는지 알려주세요. – Shaz

+0

아니요. 나는 그 일을했고 또한 dll이 실제로 설치된 서비스와 동일한 폴더에 있는지 확인했다. 그것은 여전히 ​​그들을 찾을 수 없다고보고합니다. 나는이 모든 dll을 System32 디렉토리에 복사하고 싶지 않습니다. 그들은 거기에 아무런 사업도하지 않고 '공유 된'라이브러리가 아닌 내 앱의 일부가되고 있습니다. 열쇠는 작업 폴더가 서비스 실행 파일이있는 위치라고 생각하도록 서비스를 속일 필요가 있다는 것으로 밝혀졌습니다. 코드에서 쉽게 수행 할 수 있습니다. –

1

작업 폴더가 서비스 실행 파일의 위치를 ​​서비스라고 생각하는 것으로 바뀌 었습니다. 위 링크 중 일부 덕분에 코드에서 쉽게 수행 할 수 있습니다.

관련 문제