【问题标题】:How to detect if application is running from a DVD?如何检测应用程序是否从 DVD 运行?
【发布时间】:2012-08-18 23:57:30
【问题描述】:

我正在尝试检测我们的应用程序是否从 DVD 运行(因为这会禁用/启用逻辑中的功能)。到目前为止,我已经想出了下面的代码 sn-p 似乎可以工作,但我真的想知道是否有检测到这一点的最佳实践。

    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;
        }
    }

【问题讨论】:

  • 为什么需要检测这个?是你要写文件的原因吗?然后只需检查当前位置是否可写。
  • @EsbenSkovPedersen 我们想要检测到这一点的原因是这是一个轻型安装程序客户端,它需要知道它是应该在本地(dvd)查找文件还是从网络下载它们。在本地运行时,一些登录功能也会被禁用。

标签: c# system.reflection driveinfo


【解决方案1】:

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

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

【讨论】:

  • EntryAssembly 的好点子!您对 catch-block 也是正确的。非常感谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 2010-09-26
    • 2015-06-27
    • 2016-01-15
    • 2015-01-30
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多