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 ファイルパス /// /// ファイルリスト提供サーバのリストファイル /// [Obsolete] public static readonly string ProviderListFile = "provider.list.txt"; /// /// ファイルリスト提供レポジトリリストのファイル /// 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 { 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が設定されているならば、それをもとに設定 return new WebProxy(pref.ProxyAddress); } } } #endregion } }