OSDN Git Service

AppliStation-All,起動時間の高速化。起動時のpackages.list.xmlの読み込み処理を正常時に2回重複して行っていたのを修正。
[applistation/AppliStation.git] / na-get-lib / NaGet / Env.cs
1 using System;\r
2 using System.IO;\r
3 using System.Net;\r
4 \r
5 namespace NaGet\r
6 {\r
7         /// <summary>\r
8         /// 環境変数などを取り扱うクラス\r
9         /// </summary>\r
10         public sealed class Env\r
11         {               \r
12                 /// <summary>\r
13                 /// 呼び出し禁止\r
14                 /// </summary>\r
15                 private Env()\r
16                 {\r
17                 }\r
18                 \r
19                 #region pref.xml関連\r
20                 \r
21                 /// <summary>\r
22                 /// 設定を格納\r
23                 /// </summary>\r
24                 private static NaGetLibPref pref;\r
25                 \r
26                 /// <summary>\r
27                 /// 設定(のクローンオブジェクト)を返す。\r
28                 /// </summary>\r
29                 public static NaGetLibPref Pref {\r
30                         get {\r
31                                 NaGetLibPref prefCopied = new NaGetLibPref();\r
32                                 \r
33                                 if (pref == null) {\r
34                                         LoadPref();\r
35                                 }\r
36                                 NaGet.Utils.FieldCopy(pref, ref prefCopied);\r
37                                 \r
38                                 return prefCopied;\r
39                         }\r
40                 }\r
41                 \r
42                 /// <summary>\r
43                 /// 設定ファイルのある場所を取得する\r
44                 /// </summary>\r
45                 public static string PrefPath {\r
46                         get {\r
47                                 return Path.Combine(Environment.CurrentDirectory, "pref.xml");\r
48                         }\r
49                 }\r
50                 \r
51                 /// <summary>\r
52                 /// 設定ファイルを読み込む。または再読み込みする。\r
53                 /// </summary>\r
54                 public static void LoadPref()\r
55                 {\r
56                         string path = PrefPath;\r
57                         try {\r
58                                 if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path);\r
59                                 pref = NaGet.Utils.GetDeserializedObject<NaGetLibPref>(path);\r
60                         } catch(Exception) {\r
61                                 pref = new NaGetLibPref();\r
62                         }\r
63                 }\r
64                 \r
65                 \r
66                 #endregion\r
67 \r
68                 #region ファイルパス\r
69                 \r
70                 /// <summary>           \r
71                 /// ファイルリスト提供サーバのリストファイル        \r
72                 /// </summary>\r
73                 [Obsolete]\r
74                 public static readonly string ProviderListFile = "provider.list.txt";\r
75                 \r
76                 /// <summary>\r
77                 /// ファイルリスト提供レポジトリリストのファイル\r
78                 /// </summary>\r
79                 public static readonly string RepositoriesListFile = "repos.list.xml";\r
80 \r
81                 /// <summary>\r
82                 /// ファイルリストから読み込まれたパッケージのリストファイル\r
83                 /// </summary>\r
84                 public static readonly string PackageListFile = "packages.list.xml";\r
85 \r
86                 /// <summary>\r
87                 /// 本ソフトウェアを介してインストールされたパッケージのリストファイル\r
88                 /// </summary>\r
89                 public static readonly string ArchiveInstalledPackageListFile = "packages.envinstalled.xml";\r
90 \r
91                 /// <summary>\r
92                 /// システムから検出されたパッケージのリストファイル\r
93                 /// </summary>\r
94                 public static readonly string SystemInstalledPackageListFile = "packages.sysinstalled.xml";\r
95                 \r
96                 /// <summary>\r
97                 /// インストールログファイル\r
98                 /// </summary>\r
99                 public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml";\r
100                 \r
101                 /// <summary>\r
102                 /// アプリケーションデータを保存するフォルダーのパス\r
103                 /// </summary>\r
104                 public static string AppDataFolderPath\r
105                 {\r
106                         get {\r
107                                 if (pref == null) LoadPref();\r
108                                 \r
109                                 if (! string.IsNullOrEmpty(pref.AppDataFolder)) {\r
110                                         return pref.AppDataFolder;\r
111                                 }\r
112                                 \r
113                                 return Environment.CurrentDirectory;\r
114                         }\r
115                 }\r
116 \r
117                 /// <summary>\r
118                 /// インストーラーの一時置き場の親ディレクトリ\r
119                 /// </summary>\r
120                 public static string ArchiveFolderPath\r
121                 {\r
122                         get {\r
123                                 if (pref == null) LoadPref();\r
124 \r
125                                 if (! string.IsNullOrEmpty(pref.CacheFolder)) {\r
126                                         return pref.CacheFolder;\r
127                                 }\r
128                                 \r
129                                 return Path.Combine(AppDataFolderPath, "Cache");\r
130                         \r
131                         }\r
132                 }\r
133                 \r
134                 /// <summary>\r
135                 /// アーカイバ方式のパッケージのインストール先フォルダー\r
136                 /// </summary>\r
137                 public static string ArchiveProgramFiles {\r
138                         get {\r
139                                 return Path.Combine(AppDataFolderPath, "progs");\r
140                         }\r
141                 }\r
142                 \r
143                 /// <summary>\r
144                 /// アーカイバ方式のパッケージのプログラムグループフォルダー\r
145                 /// </summary>\r
146                 public static string ArchiveProgramGroup {\r
147                         get {\r
148                                 return Path.Combine(AppDataFolderPath, "programs");\r
149                         }\r
150                 }\r
151 \r
152                 /// <summary>\r
153                 /// アーカイバ方式のパッケージのSystem32のフォルダー\r
154                 /// </summary>\r
155                 public static string ArchiveSystem32 {\r
156                         get {\r
157                                 return Path.Combine(ArchiveProgramFiles, ".system32");\r
158                         }\r
159                 }\r
160                 \r
161                 #endregion\r
162                 \r
163                 #region ネットワーク\r
164                 \r
165                 /// <summary>\r
166                 /// ウェブアクセスのためのプロキシを取得する。\r
167                 /// </summary>\r
168                 /// <returns>プロキシ</returns>\r
169                 public static IWebProxy WebProxy\r
170                 {\r
171                         get {\r
172                                 if (pref == null) LoadPref();\r
173                                 \r
174                                 if (string.IsNullOrEmpty(pref.ProxyAddress)) {\r
175                                         // 設定されていないときはシステムのデフォルトを使う\r
176                                         return WebRequest.GetSystemWebProxy();\r
177                                 } else if (pref.ProxyAddress == "-") {\r
178                                         // "-"のとき直接接続\r
179                                         return null;\r
180                                 } else {\r
181                                         // host:portが設定されているならば、それをもとに設定\r
182                                         return new WebProxy(pref.ProxyAddress);\r
183                                 }\r
184                         }\r
185                 }\r
186                 \r
187                 #endregion\r
188                 \r
189                 #region インストールプロセス\r
190                 \r
191                 /// <summary>\r
192                 /// インストーラーをウイルススキャンするか?\r
193                 /// </summary>\r
194                 public static bool EnableScanInstallerFile {\r
195                         get {\r
196                                 if (pref == null) LoadPref();\r
197                                 return pref.EnableScanInstallerFile;\r
198                         }\r
199                         set {\r
200                                 if (pref == null) LoadPref();\r
201                                 pref.EnableScanInstallerFile = value;\r
202                         }\r
203                 }\r
204 \r
205                 /// <summary>\r
206                 /// インストールプロセスをバックグラウンドで行うか?\r
207                 /// </summary>\r
208                 public static bool InstallProcessOnBackground {\r
209                         get {\r
210                                 if (pref == null) LoadPref();\r
211                                 return pref.InstallOnBackground;\r
212                         }\r
213                         set {\r
214                                 if (pref == null) LoadPref();\r
215                                 pref.EnableScanInstallerFile = value;\r
216                         }\r
217                 }\r
218                 \r
219                 \r
220                 #endregion\r
221                 \r
222         }\r
223 }\r