2

我正在尝试检测我们的应用程序是否从 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;
        }
    }
4

2 回答 2

7

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

为什么是静音catch块?您之前尝试此操作时是否遇到异常?即使你这样做了,你真的应该捕获你知道如何处理的特定异常,而不是一切。

于 2012-08-23T13:00:55.933 回答
1

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

在这种情况下,您必须查询 WMI 以获取有关硬件的更多信息,以尝试确定它是否“真实” - 但这也不是安全的赌注,因此您现有的解决方案应该涵盖除电源之外的任何内容知道自己在做什么的用户(无论如何您都无法对他们做太多的事情)

于 2012-08-23T13:00:47.610 回答