2011-09-19 5 views
0

DirectoryCatalog를 생성 할 때 MEF가 멈추는 곳에 문제가 있습니다. MEF 기능을 테스트하는 Windows Forms 응용 프로그램이 있는데 문제없이 작동합니다. 그러나 Windows 서비스에서 동일한 코드를 실행하면 다음 줄이 표시됩니다.C# MEF DirectoryCatalog를 생성 할 때 멈춤

_catalog = new DirectoryCatalog(assemblyBaseDirectory); 


//Here is the full code block. 
var codeBaseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 

if (codeBaseDir != null) { 
    assemblyBaseDirectory = new Uri(codeBaseDir).AbsolutePath; 
    Logger.Info("Creating Directory Catalog for " + assemblyBaseDirectory); 
    _catalog = new DirectoryCatalog(assemblyBaseDirectory); 
    Logger.Info("Directory Catalog created!"); 

} 

예외가 없습니다. 로그인을하고 두 번째 Logger.Info 라인이 호출되지 않는다는 것을 알았습니다.

는 UPDATE :

나는 내 서비스에서이 코드를 호출 할 때 내 경로가 동일하게 반환되지 않았 음을 결정했다. 디렉토리 경로의 형식을 "C :/Program % 20Files/My % 20Service"로 지정했습니다. 왜 내 win forms 애플리케이션에서이 작업을 수행하지 않았는지 잘 모르겠습니다.

답변

1

내가보기에 가장 먼저해야 할 일은 Windows 응용 프로그램을 실행하는 것과 자신을 실행하는 것 사이의 차이점이라고 생각한 다음 Windows 서비스를 실행하는 것입니다. 또한 windows 서비스의 시작 디렉토리는 C:\Windows\System32이며 여기에서 svchost.exe이 실행됩니다.

var path = new Uri(typeof(Something).Assembly.Location).LocalPath; 
var catalog = new DirectoryCatalog(path); 

당신이 서비스의 사용자가 동일한 경로에 액세스 할 수 있는지 확인할 수 있습니다 서비스를 사용할 때 내가 시작 경로를 확인하는 방법은, 로컬 경로를 잡기 위해 Uri 클래스에 호출을 래핑하는 것입니다?

+0

서비스가 로컬 시스템 계정으로 실행됩니다. 내가 제공 한 코드를 사용하여 경로를 확인했고 코드에서 얻은 경로와 동일한 경로를 반환합니다. 그것은 내 서비스를 설치 한 경로입니다. 이견있는 사람? 감사. –

+0

이 사이트에서 MEF 및 디렉토리 권한으로 다른 사람들의 문제를 조사한 결과, 보안 문제가있을 때 예외가 발생하는 것처럼 보입니다. –

관련 문제