0

예약 된 작업이 실행될 수 있는지 테스트 한 다음 작업을 실행하기 위해 백그라운드 작업자를 시작하는 Windows 서비스를 만들고 있습니다.백그라운드 작업자와의 Windows 서비스 파일 또는 어셈블리 오류를로드 할 수 없습니다.

Windows 서비스의 주 스레드 내에서 Windows 서비스 실행 파일과 동일한 디렉터리에있는 어셈블리에서 데이터 액세스 계층 (DAL) 개체를 만듭니다. 이것은 작동합니다.

배경 작업자 내에서 동일한 개체의 새 인스턴스를 만들려고합니다. 이것이 성공한 것 같습니다. DAL의 메서드는 어셈블리에서 SQL 파일을로드 한 다음 제공 데이터베이스에 대해 실행됩니다.

System.IO.FileLoadException: Could not load file or assembly 'file:///C:\Windows\system32\DataConnector.dll' or one of its dependencies. The system cannot find the file specified. 
    File name: 'file:///C:\Windows\system32\DataConnector.dll' 
     at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
    at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
    at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
    at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) 
    at System.Reflection.Assembly.LoadFrom(String assemblyFile) 
    at DataConnector.DatabaseConnector.UpdateDatabase() 

배경 작업자가 C에보고하려고 이유를 모르겠어요 : \ 디렉토리 \ WINDOWS \ system32를

어딘가에이 과정에서 나는 다음과 같은 오류가 발생합니다.

+0

- 이것은 무엇을 의미 하는가를? SQL 파일이 어셈블리로 컴파일됩니까? –

답변

2

이것은 아마도 문제가 해결됩니다 다음 DAL의 방법은 어셈블리 *에서 SQL 파일을로드 *

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 
+0

-1 이것은 코딩 문제로 인한 것이 아니며 어셈블리 바인딩 해결 문제입니다. –

+0

@TomRedfern. 나는 이것이 ** 코딩 문제라고 생각합니다. 현재 서비스에 대한 디렉토리는 c : \ windows \ system32가 될 것이므로, 현재 Assembly.LoadFrom을 사용하고있는 프로그램이 단순히 현재 디렉토리에서 dll을 찾고 있다고 의심 할 것입니다. 이 경우 문제가 해결 될 것입니다. 대안은 Assembly.LoadFrom을 변경하여 올바른 디렉토리에서 파일을로드하는 것입니다. – sgmoore

+0

@ sgmoore의 의견에 비추어 질문을 다시 읽은 후에, 나는 코카인 머리의 대답에 대한 나의 원래 평가에서 틀렸다는 것을 인정한다. 사과! - 불행히도 내 대답을 업데이트하지 않으면 내 투표를 취소 할 수 없습니다 ... –