我正在尝试检测我们的应用程序是否在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;
}
}
如果您想知道应用程序(而不是您所在的任何特定程序集)是否在光盘驱动器上运行,那么您可能应该使用GetEntryAssembly()
而不是GetExecutingAssembly()
。除此之外,你上面的逻辑似乎完全合理。
为什么静默catch
块?你以前尝试这个时遇到异常了吗?即使您这样做了,您也应该捕获您知道如何处理的特定异常,而不是所有异常。
您的解决方案是最坚固的。然而,如果从虚拟DVD驱动器运行(我想你不想要),它仍然可以工作
在这种情况下,您必须查询WMI以获得有关硬件的更多信息,并尝试弄清楚它是否是"真实的"-但这也不是一个安全的赌注,因此您现有的解决方案应该为您提供任何服务,除了知道自己在做什么的超级用户(无论如何您都无法对其进行太多攻击)