h-you / branches / src / UpDateCopy / FrmCopy.cs @ 70
履歴 | 表示 | アノテート | ダウンロード (10.2 KB)
1 | 70 | bit | using System; |
---|---|---|---|
2 | using System.Collections; |
||
3 | using System.Collections.Generic; |
||
4 | using System.ComponentModel; |
||
5 | using System.Data; |
||
6 | using System.Diagnostics; |
||
7 | using System.Drawing; |
||
8 | using System.IO; |
||
9 | using System.Linq; |
||
10 | using System.Security.Cryptography; |
||
11 | using System.Text; |
||
12 | using System.Threading.Tasks; |
||
13 | using System.Windows.Forms; |
||
14 | using System.IO.Compression; |
||
15 | |||
16 | namespace UpDateCopy |
||
17 | { |
||
18 | public partial class FrmCopy : Form |
||
19 | { |
||
20 | |||
21 | // コピー一覧リスト |
||
22 | private static List<string> m_CopyList = new List<string>(); |
||
23 | |||
24 | #region コンストラクタ |
||
25 | public FrmCopy() |
||
26 | { |
||
27 | InitializeComponent(); |
||
28 | } |
||
29 | #endregion |
||
30 | |||
31 | /// <summary> |
||
32 | /// 画面ロード |
||
33 | /// </summary> |
||
34 | /// <param name="sender"></param> |
||
35 | /// <param name="e"></param> |
||
36 | private void FrmCopy_Load(object sender, EventArgs e) |
||
37 | { |
||
38 | } |
||
39 | |||
40 | /// <summary> |
||
41 | /// 工程管理の終了を待ってコピーする |
||
42 | /// </summary> |
||
43 | /// <param name="sender"></param> |
||
44 | /// <param name="e"></param> |
||
45 | private void FrmCopy_Shown(object sender, EventArgs e) |
||
46 | { |
||
47 | // コマンドライン引数を取る |
||
48 | string[] cmds = Environment.GetCommandLineArgs(); |
||
49 | |||
50 | lblMessage.Text = ClsCommon.s_TargetProcess + "を更新しています。\nそのまましばらくお待ちください。"; |
||
51 | lblMessage.Refresh(); |
||
52 | |||
53 | // ▼自動更新VPS対応▼ |
||
54 | System.Threading.Thread.Sleep(1000); |
||
55 | |||
56 | string tempPath = Path.GetTempPath(); |
||
57 | // サーバ更新モジュールzipファイル(ダウンロード後) |
||
58 | string updateModuleZip = tempPath + ClsCommon.s_HONTAI_MODULE + ".zip"; |
||
59 | |||
60 | // 「現場監督秘書(本体)zipの展開フォルダが存在するかチェック |
||
61 | if (System.IO.Directory.Exists(tempPath + ClsCommon.s_HONTAI_MODULE)) { |
||
62 | // zip削除 |
||
63 | System.IO.File.Delete(tempPath + ClsCommon.s_HONTAI_MODULE + ".zip"); |
||
64 | // ダウンロードファイル削除 |
||
65 | System.IO.Directory.Delete(tempPath + ClsCommon.s_HONTAI_MODULE, true); |
||
66 | } |
||
67 | // 「現場監督秘書(本体)zipダウンロード |
||
68 | download(ClsCommon.s_FTP_SERVER_PATH + ClsCommon.s_HONTAI_MODULE + ".zip", updateModuleZip); |
||
69 | // ダウンロードした「現場監督秘書(本体)zip解凍 |
||
70 | ZipFile.ExtractToDirectory(updateModuleZip, tempPath); |
||
71 | // ▲自動更新VPS対応▲ |
||
72 | |||
73 | // メインプログラムの終了を待つ |
||
74 | while (true) |
||
75 | { |
||
76 | bool Aliveflg = false; |
||
77 | int cnt = 0; |
||
78 | Process[] processList = Process.GetProcesses(); |
||
79 | foreach (Process p in processList) |
||
80 | { |
||
81 | Aliveflg = false; |
||
82 | if (p.ProcessName == ClsCommon.s_TargetProcess) |
||
83 | { |
||
84 | if (p.Responding) |
||
85 | { |
||
86 | Aliveflg = true; |
||
87 | Console.WriteLine("OK"); |
||
88 | break; |
||
89 | } |
||
90 | } |
||
91 | Debug.WriteLine(++cnt + ":" + p.ProcessName); |
||
92 | } |
||
93 | if (!Aliveflg) break; |
||
94 | System.Threading.Thread.Sleep(1000); |
||
95 | } |
||
96 | |||
97 | System.Threading.Thread.Sleep(1000); |
||
98 | |||
99 | // ファイルコピー |
||
100 | CopyFileProcess(); |
||
101 | |||
102 | this.Close(); |
||
103 | Application.Exit(); |
||
104 | |||
105 | // ターゲットを起動する |
||
106 | string ExecProc = System.Environment.CurrentDirectory + "\\" + ClsCommon.s_TargetProcess + ".exe"; |
||
107 | //logger.ErrorFormat("{0}:起動プログラム:{1}", this.Name, ExecProc); |
||
108 | // ▼自動更新VPS対応▼ |
||
109 | // 起動パラメータつきで起動する |
||
110 | Process exec = Process.Start(ExecProc, ClsCommon.s_KIDOU_PARAM); |
||
111 | // Process exec = Process.Start(ExecProc); |
||
112 | // ▲自動更新VPS対応▲ |
||
113 | |||
114 | } |
||
115 | |||
116 | /// <summary> |
||
117 | /// ファイルコピーメイン |
||
118 | /// </summary> |
||
119 | /// <param name="dir"></param> |
||
120 | private void CopyFileProcess() |
||
121 | { |
||
122 | try |
||
123 | { |
||
124 | // コピー対象を検索する |
||
125 | CreateCopyList(); |
||
126 | // コピー対象が無ければ処理終了 |
||
127 | if (m_CopyList.Count == 0) return; |
||
128 | |||
129 | lblMessage.Text = ClsCommon.s_TargetProcess + "を更新しています。\nそのまましばらくお待ちください。"; |
||
130 | lblMessage.Refresh(); |
||
131 | |||
132 | // プログレスバー設定 |
||
133 | progressBar.Minimum = 0; |
||
134 | progressBar.Value = 0; |
||
135 | // プログレスバーMAX設定 |
||
136 | progressBar.Maximum = m_CopyList.Count; |
||
137 | |||
138 | // コピー先ファイル名 |
||
139 | string destinationPath = System.Environment.CurrentDirectory + @"\" ; |
||
140 | |||
141 | // ファイルコピー |
||
142 | for (int i = 0; i < m_CopyList.Count; i++) |
||
143 | { |
||
144 | // ファイル名を取得する |
||
145 | int spoint = m_CopyList[i].LastIndexOf("\\") + 1; |
||
146 | string Procename = m_CopyList[i].Substring(spoint); |
||
147 | |||
148 | // コピー先ファイル名 |
||
149 | string destinationFile = @destinationPath + Procename; |
||
150 | |||
151 | // ファイルコピー |
||
152 | File.Copy(@m_CopyList[i], @destinationFile, true); |
||
153 | ClsCommon.ErrorLogWrite(string.Format("{0}::{1}", @m_CopyList[i], @destinationFile)); |
||
154 | // プログレスバー加算 |
||
155 | progressBar.Value++; |
||
156 | progressBar.Refresh(); |
||
157 | } |
||
158 | // プログレスバー加算 |
||
159 | progressBar.Value = progressBar.Maximum; |
||
160 | progressBar.Refresh(); |
||
161 | // ▼自動更新VPS対応▼ |
||
162 | string tempPath = Path.GetTempPath(); |
||
163 | // zip削除 |
||
164 | System.IO.File.Delete(tempPath + ClsCommon.s_HONTAI_MODULE + ".zip"); |
||
165 | // ダウンロードファイル削除 |
||
166 | System.IO.Directory.Delete(tempPath + ClsCommon.s_HONTAI_MODULE, true); |
||
167 | // ▲自動更新VPS対応▲ |
||
168 | |||
169 | } |
||
170 | catch (Exception ex) |
||
171 | { |
||
172 | ClsCommon.ErrorLogWrite(ex.Message.ToString()); |
||
173 | } |
||
174 | } |
||
175 | /// <summary> |
||
176 | /// コピーファイル一覧作成 |
||
177 | /// </summary> |
||
178 | /// <param name="wrtString"></param> |
||
179 | /// <returns></returns> |
||
180 | private void CreateCopyList() |
||
181 | { |
||
182 | |||
183 | try |
||
184 | { |
||
185 | lblMessage.Text = ClsCommon.s_TargetProcess + "の更新を調査しています。\nそのまましばらくお待ちください。"; |
||
186 | lblMessage.Refresh(); |
||
187 | |||
188 | // 自プロセス名を作成する |
||
189 | string myProcess = Process.GetCurrentProcess().ProcessName + ".exe"; |
||
190 | |||
191 | // ▼自動更新VPS対応▼ |
||
192 | // コピー元ファイル名を取得する |
||
193 | // string[] files = Directory.GetFiles(@ClsCommon.s_UPDATE_FILE_PATH); |
||
194 | string[] files = Directory.GetFiles(Path.GetTempPath() + "\\" + ClsCommon.s_HONTAI_MODULE); |
||
195 | // ▲自動更新VPS対応▲ |
||
196 | |||
197 | foreach (string sourceFile in files) |
||
198 | { |
||
199 | // ファイル名を取得する |
||
200 | int spoint = sourceFile.LastIndexOf("\\") + 1; |
||
201 | string ProgramName = sourceFile.Substring(spoint); |
||
202 | |||
203 | // 自分は処理しない |
||
204 | if (myProcess == ProgramName) continue; |
||
205 | |||
206 | // コピー先ファイル名 |
||
207 | string destinationFile = System.Environment.CurrentDirectory + "\\" + ProgramName; |
||
208 | |||
209 | // ----- コピー先にファイルファイルがない |
||
210 | if (!File.Exists(@destinationFile)) |
||
211 | { |
||
212 | m_CopyList.Add(@sourceFile); |
||
213 | continue; |
||
214 | } |
||
215 | |||
216 | // ハッシュ値を取得する |
||
217 | // ----- コピー元ファイル |
||
218 | string srcHash = ClsCommon.GetFileHashData(@sourceFile); |
||
219 | // ----- コピー先ファイル |
||
220 | string destHash = ClsCommon.GetFileHashData(@destinationFile); |
||
221 | |||
222 | // ファイルが違う |
||
223 | if (srcHash != destHash) |
||
224 | { |
||
225 | // 更新時間を確認する |
||
226 | // ----- コピー元ファイル |
||
227 | DateTime srcTimeStamp = ClsCommon.GetFileTimeStamp(@sourceFile, 'U'); |
||
228 | // ----- コピー先ファイル |
||
229 | DateTime destTimeStamp = ClsCommon.GetFileTimeStamp(@destinationFile, 'U'); |
||
230 | // コピー元ファイルが新しくない |
||
231 | if (srcTimeStamp <= destTimeStamp) continue; |
||
232 | |||
233 | m_CopyList.Add(@sourceFile); |
||
234 | } |
||
235 | } |
||
236 | } |
||
237 | catch (Exception ex) |
||
238 | { |
||
239 | ClsCommon.ErrorLogWrite(ex.Message.ToString()); |
||
240 | } |
||
241 | } |
||
242 | |||
243 | // ▼自動更新VPS対応▼ |
||
244 | // サーバからファイルダウンロード |
||
245 | private static void download(String serverPath, String downloadSakiPath) |
||
246 | { |
||
247 | //WebClientオブジェクトを作成 |
||
248 | System.Net.WebClient wc = new System.Net.WebClient(); |
||
249 | //ログインユーザー名とパスワードを指定 |
||
250 | wc.Credentials = |
||
251 | new System.Net.NetworkCredential(ClsCommon.s_FTP_USER_NAME, ClsCommon.s_FTP_PASSWORD); |
||
252 | //FTPサーバーからダウンロードする |
||
253 | wc.DownloadFile(serverPath, downloadSakiPath); |
||
254 | //解放する |
||
255 | wc.Dispose(); |
||
256 | } |
||
257 | // ▲自動更新VPS対応t▲ |
||
258 | |||
259 | } |
||
260 | } |