2012-04-17 2 views
0

(Visual Studio 8)을 사용하여 Windows 서비스를 만들고 installutil.exe 도구를 사용하여 Windows 서비스를 만들었지 만 서비스 시작시 다음 코드를 수행 할 때 적절한 결과가 나타나지 않습니다. 방법.Windows 서비스의 시작 방법에 오류가 발생했습니다.

protected override void OnStart(string[] args) 
{ 
    FileStream fs = new FileStream(@"e:\mcWindowsService.txt", 
     FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter m_streamWriter = new StreamWriter(fs); 
    m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 
    m_streamWriter.WriteLine("m ready buddy"); 
    m_streamWriter.Flush(); 
    m_streamWriter.Close(); 
} 

E 드라이브에 파일을 만드는 대신에 내가 쳐다보고있을 때 다음 오류가 표시됩니다!

로컬 컴퓨터의 테스트 서비스 설치 프로그램 서비스가 시작된 다음 중지되었습니다. 일부 서비스는 다른 서비스 나 프로그램에서 사용 중이 아닌 경우 자동으로 중지됩니다.

+2

서비스를 실행하는 계정에 E에 대한 읽기/쓰기가 있습니까? 사용자를 위해 E도 존재합니까? (IE는 네트워크 공유에 매핑 된 볼륨입니까?) – vcsjones

+0

관리자 권한으로 실행중인 계정이고 로컬 시스템에서 실행하고 있습니다. – San

+0

관리 권한으로 실행 중이더라도 네트워크 드라이브에 서비스가 여전히 액세스하지 못할 수 있습니다. E가 네트워크 드라이브입니까? – CoreTech

답변

2

위의 코드를 Try-Catch 블록에 넣은 다음 예외 로그를 ​​작성하여 예외를 조사하고 조사하십시오. 또한 블록을 피하기 위해 별도의 스레드에 넣는 것이 좋습니다.

+0

그래, 별도의 스레드에서 실행 해 보겠습니다. 문제가 해결 될 수 있습니다. – San

+0

실 스레드가 도와 줬습니다. – San

0

콘솔에서 서비스를 실행하는 경우 계정에 E 드라이버에 대한 권한이 있는지 확인하십시오. 당신이 당신의 서비스를 설치하고 예외를 던진 것을 깨달았다 경우

var serviceInstaller = new ServiceProcessInstaller(); 
      serviceInstaller.Account = ServiceAccount.LocalSystem; 
0

난 당신의 코드 충돌이 거의 확실 해요 같은 서비스 설치에 대한 계정 유형을 설정합니다. 위의 try-catch 제안은 지금까지 최고의 것이므로 어떤 것을 볼 수 있습니다.

추가 : OnStart 전용 라이트 초기화 작업에서 오랜 시간이 걸리는 작업을 수행하지 마십시오. 시간 초과가 있으며 해당 임계 값을 초과하면 Windows가 시작할 수 없다는 불만을 표시합니다. 이는 성가신 시작 상태로 유지됩니다. OnStart에서 타이머를 시작하고 해당 타이머 간격의 만료 이벤트 처리기에서 무거운 것을 실행하십시오. 타이머 _Elapsed. 작업을 실행하기 전에 타이머를 일시 중지하고 작업이 끝난 후 다시 시작하십시오.

관련 문제