using System; using System.IO; using System.Net; namespace NaGet { /// /// 環境変数などを取り扱うクラス /// public sealed class Env { /// /// 呼び出し禁止 /// private Env() { } #region pref.xml関連 /// /// 設定を格納 /// private static NaGetLibPref pref; /// /// 設定(のクローンオブジェクト)を返す。 /// public static NaGetLibPref Pref { get { NaGetLibPref prefCopied = new NaGetLibPref(); if (pref == null) { LoadPref(); } NaGet.Utils.FieldCopy(pref, ref prefCopied); return prefCopied; } } /// /// 設定ファイルのある場所を取得する /// public static string PrefPath { get { return Path.Combine(Environment.CurrentDirectory, "pref.xml"); } } /// /// 設定ファイルを読み込む。または再読み込みする。 /// public static void LoadPref() { string path = PrefPath; try { if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path); pref = NaGet.Utils.GetDeserializedObject(path); } catch(Exception) { pref = new NaGetLibPref(); } } #endregion #region ファイルパス /// /// ファイルリスト提供レポジトリリストのファイル /// public static readonly string RepositoriesListFile = "repos.list.xml"; /// /// ファイルリストから読み込まれたパッケージのリストファイル /// public static readonly string PackageListFile = "packages.list.xml"; /// /// 本ソフトウェアを介してインストールされたパッケージのリストファイル /// public static readonly string ArchiveInstalledPackageListFile = "packages.envinstalled.xml"; /// /// システムから検出されたパッケージのリストファイル /// public static readonly string SystemInstalledPackageListFile = "packages.sysinstalled.xml"; /// /// インストールログファイル /// public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml"; /// /// アプリケーションデータを保存するフォルダーのパス /// public static string AppDataFolderPath { get { if (pref == null) LoadPref(); if (! string.IsNullOrEmpty(pref.AppDataFolder)) { return pref.AppDataFolder; } return Environment.CurrentDirectory; } } /// /// インストーラーの一時置き場の親ディレクトリ /// public static string ArchiveFolderPath { get { if (pref == null) LoadPref(); if (! string.IsNullOrEmpty(pref.CacheFolder)) { return pref.CacheFolder; } return Path.Combine(AppDataFolderPath, "Cache"); } } /// /// アーカイバ方式のパッケージのインストール先フォルダー /// public static string ArchiveProgramFiles { get { return Path.Combine(AppDataFolderPath, "progs"); } } /// /// アーカイバ方式のパッケージのプログラムグループフォルダー /// public static string ArchiveProgramGroup { get { return Path.Combine(AppDataFolderPath, "programs"); } } /// /// アーカイバ方式のパッケージのSystem32のフォルダー /// public static string ArchiveSystem32 { get { return Path.Combine(ArchiveProgramFiles, ".system32"); } } #endregion #region ネットワーク /// /// ウェブアクセスのためのプロキシを取得する。 /// /// プロキシ public static IWebProxy WebProxy { get { if (pref == null) LoadPref(); if (string.IsNullOrEmpty(pref.ProxyAddress)) { // 設定されていないときはシステムのデフォルトを使う return WebRequest.GetSystemWebProxy(); } else if (pref.ProxyAddress == "-") { // "-"のとき直接接続 return null; } else { // host:portが設定されているならば、それをもとに設定 WebProxy proxy = new WebProxy(pref.ProxyAddress); // 認証プロキシの場合、認証情報を付加する try { Uri uri = new Uri(pref.ProxyAddress); if (! string.IsNullOrEmpty(uri.UserInfo)) { int pos = uri.UserInfo.IndexOf(':'); if (pos >= 0) { proxy.Credentials = new NetworkCredential( uri.UserInfo.Substring(0, pos), uri.UserInfo.Substring(pos+1) ); } } } catch (Exception) { } return proxy; } } } #endregion #region インストールプロセス /// /// インストーラーをウイルススキャンするか? /// public static bool EnableScanInstallerFile { get { if (pref == null) LoadPref(); return pref.EnableScanInstallerFile; } set { if (pref == null) LoadPref(); pref.EnableScanInstallerFile = value; } } /// /// インストールプロセスをバックグラウンドで行うか? /// public static bool InstallProcessOnBackground { get { if (pref == null) LoadPref(); return pref.InstallOnBackground; } set { if (pref == null) LoadPref(); pref.EnableScanInstallerFile = value; } } /// /// アップデートから除外するパッケージの名前 /// public static string[] ExcludeUpdatePackageNames { get { if (pref == null) LoadPref(); return pref.ExcludeUpdatePackageNames; } set { if (pref == null) LoadPref(); pref.ExcludeUpdatePackageNames = value; } } #endregion } }