2011-08-24 7 views
2

Linq-SQL 데이터 액세스 계층에서 데이터를 가져 오는 Windows 서비스를 만들려고합니다. DAL의 경우 외부 XML 매핑 파일을 사용하고 있습니다.Windows 서비스에서 사용하기 위해 정적 컨텐트 배포 및 사용

상황이 잘 구축하는 것,하지만 난 서비스를 설치하고 시도 후 나는 다음과 같은 오류 얻을 그것을 시작 : 모든

Service cannot be started. System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system32\Generated\SpiSytelineMapping.xml'.

먼저, 나는 그것이을 찾고 이유를 알아 내려고 노력하고있어 서비스 실행 파일이있는 디렉토리가 아닌 system32 디렉토리의 파일을 맵핑하십시오.

그렇다고해도 system32 디렉토리를 탐색 할 때 콘텐츠 파일이 실제로 거기에 복사 된 것을보고 놀랐습니다. '파일이 있기 때문에

C:\Windows\System32\Generated>dir 

Directory of C:\Windows\System32\Generated 

08/24/2011 02:32 PM <DIR>   . 
08/24/2011 02:32 PM <DIR>   .. 
08/24/2011 02:09 PM   447,079 AbcSytelineMapping.xml 
08/24/2011 02:09 PM   442,374 HtiSytelineMapping.xml 
01/19/2011 05:07 PM   445,155 MpiCorpSytelineMapping.xml 
08/24/2011 02:09 PM   464,353 SpiSytelineMapping.xml 
08/24/2011 02:09 PM   440,483 SytelineMapping.xml 
       5 File(s)  2,239,444 bytes 
       2 Dir(s) 56,826,531,840 bytes free 

, 나의 첫번째 가정은이 권한 문제이지만, 디렉토리와 파일이'모든 사람 '에 대한 읽기 권한이 있음을, 그리고 나는'관리자 '에서 서비스를 시작 시도 로컬 시스템 '및 내 계정 (관리자 계정이기도 함) 모두가 같은 오류로 실패했습니다.

해당 파일이 응용 프로그램의 설치 디렉토리에 실행 파일과 함께 표시됩니다.

내가 누락 된 부분에 대해 어떤 사람이 밝힐 수 있습니까?

Windows 서비스 시작, 그것은 C에서 시작 16,

답변

1

: 당신의 매핑을로드 할 때 \ WINDOWS \ system32를 어쩌면 당신은이 작업을 수행 할 수 있습니다

string connStr = "server=.;database=AdventureWorksLT;integrated security=true;"; 
string currentPath=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); 
using (CustomDataContext context = new CustomDataContext(connStr, XmlMappingSource.FromUrl(currentPath+"\\CustomerMapping.xml"))) 
{ 

} 

있는 현재 디렉토리에서 XML을로드 강제로 windows 서비스.

+0

이 작동하고, 나는 또한이 Linq-to-SQL 클래스 라이브러리를 사용하는 다른 응용 프로그램에서도 더 깨끗해 질 것이라고 생각합니다. 당신의 도움을 주셔서 감사합니다. –

1

위의 작품을하는 동안, 나는 자원으로 매핑 파일을 포함하고 다음에 거기에서 그것을로드하는 그것을 훨씬 더 발견 :

private static string GetXmlMapping() 
    { 
     Stream xmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Mpicorp.SytelineDataModel.Generated.SytelineMapping.xml"); 
     StreamReader streamReader = new StreamReader(xmlStream); 
     return streamReader.ReadToEnd(); 
    } 

이 매우 간단하고 훨씬 더 우아; 내 데이터 액세스 계층은 지금 배포하기가 훨씬 쉽습니다. 원래의 게시물을 만들었을 때 나는이 방법을 모르고있었습니다. 아마도 이것은 같은 딜레마를 가진 사람에게 유용 할 수 있습니다.

관련 문제