2012-08-23 4 views
2

응용 프로그램이 DVD에서 실행 중인지 감지하려고합니다 (논리에서 기능을 사용 불가능하게 설정했기 때문에). 지금까지이 코드 스 니펫이 작동하는 것처럼 보였습니다. 실제로이를 감지하는 데 가장 좋은 방법이 있는지 궁금해하고있었습니다.응용 프로그램이 DVD에서 실행 중인지 확인하는 방법은 무엇입니까?

public static bool IsDVDInstallation() 
    { 
     try 
     { 
      string location = Assembly.GetExecutingAssembly().Location; 
      var info = new DriveInfo(Path.GetPathRoot(location)); 
      return info.DriveType == DriveType.CDRom; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
+5

좋아요 .... – DanielB

+0

왜 이것을 감지해야합니까? 파일을 쓰고 싶은 이유가 무엇입니까? 그런 다음 현재 위치가 쓰기 가능한지 확인하십시오. –

+0

괜찮습니다 ....... –

답변

7

광학 드라이브에서 응용 프로그램 (특정 조립품이 아닌)이 실행 중인지 알고 싶으면 GetExecutingAssembly() 대신 GetEntryAssembly()을 사용해야합니다. 그 외, 위의 논리는 완벽하게 합리적인 것 같습니다.

왜 침묵하는 catch 블록? 이전에 이것을 시도 할 때 예외가 발생 했습니까? 비록 당신이했다하더라도, 당신은 정말로 특정 예외를 캡처해야합니다. 당신은 모든 것보다는 처리하는 방법을 알고 있습니다.

+0

EntryAssembly에서 좋은 점! 당신은 catch 블록에 대해서도 마찬가지입니다. 고마워. –

1

귀하의 솔루션은 거의 견고합니다. 그러나 가상 DVD 드라이브 (당신이 원하지 않는다고 생각하는)에서 실행하는 경우에도 여전히 작동합니다.

하드웨어에 대한 자세한 정보를 얻으려면 WMI를 쿼리해야합니다. '진짜'이건 아니건간에 - 이것은 안전한 내기가 아니기 때문에 기존 솔루션은 자신이하는 일을 알고있는 고급 사용자를 제외한 모든 사람을 대상으로해야합니다. (어쨌든 많은 일을 할 수없는 사람)