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 に答える