2012-08-23 75 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

如果您想知道应用程序(而不是您所在的任何特定组件)是否在光驱上运行,那么您可能应该使用GetEntryAssembly()而不是GetExecutingAssembly()。除此之外,你的逻辑似乎是完全合理的。

为什么沉默catch块?以前尝试使用时是否遇到异常?即使你这样做了,你也应该捕捉到你知道如何处理而不是一切的例外情况。

+0

EntryAssembly的好处!你也是对的。非常感谢。 –

1

您的解决方案大致如实。但是,如果从虚拟DVD驱动器运行(我假设你不想要),它仍然可以工作

在这种情况下,您必须查询WMI以获取有关硬件的更多信息,是真实的或者不真实 - 但这也不是安全的选择,所以你现有的解决方案应该覆盖你,除了知道自己在做什么的高级用户(无论如何你不会做太多的事)

相关问题