我正在尝试检测我们的应用程序是否从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;
}
}
答案 0 :(得分:7)
如果您想知道应用程序(而不是您所使用的任何特定程序集)是否在光驱上运行,那么您可能应该使用GetEntryAssembly()
而不是GetExecutingAssembly()
catch
。除此之外,你上面的逻辑看起来非常合理。
为什么无声{{1}}阻止?你以前尝试过这个时有异常吗?即使你这样做了,你也应该捕获你知道如何处理的特定的异常,而不是一切。
答案 1 :(得分:1)
你的解决方案和它一样坚固。但是,如果从虚拟DVD驱动器(我认为你不需要)运行它仍然可以运行
在这种情况下,您必须查询WMI以获取有关硬件的更多信息,以尝试确定它是否“真实” - 但这也不是安全的选择,因此您现有的解决方案应该涵盖您除了知道他们正在做什么的高级用户之外的任何事情(无论如何你都无法做多少)