using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Threading; using System.Diagnostics; namespace NewPosInstaller { public partial class frmStart : Form { /// /// 작업 디렉토리 /// "C:\SPC_NewPosInstall\" /// public const string WorkDir = @"C:\SPC_NewPosInstall\"; /// /// 로그 디렉토리 /// public const string LogDir = WorkDir + @"log\"; private string _sourcePath = string.Empty; private string _targetPath = string.Empty; private string _executeFile = string.Empty; private enum LogLevel { trace, Error, Exception, } private string[] LogLevelName = new string[] { "TRACE", "ERROR", "EXCEPTION" }; public frmStart(string[] args) { InitializeComponent(); WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Empty.PadRight(80, '=')); WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , "SPC NewPos Installer Update Start [version=" + Application.ProductVersion + "]"); if (args.Length >= 2) { _sourcePath = args[0].Trim(); _targetPath = args[1].Trim(); _executeFile = args[2].Trim(); } WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format("SourcePath={0} TargetPath={1} ExecuteFile={2}" , _sourcePath, _targetPath, _executeFile)); } private void Form_Load(object sender, EventArgs e) { try { // 화면 초기 위치 (윈도우 오른쪽 하단) int x = Screen.PrimaryScreen.WorkingArea.Size.Width - 400; int y = Screen.PrimaryScreen.WorkingArea.Size.Height - 150; this.Location = new Point(x, y); } catch (Exception ex) { WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , ex.Message); } } private void Form_Closing(object sender, FormClosingEventArgs e) { try { string closeReason = string.Empty; switch (e.CloseReason) { case CloseReason.ApplicationExitCall: closeReason = "ApplicationExitCall"; break; case CloseReason.TaskManagerClosing: closeReason = "TaskManagerClosing"; break; case CloseReason.FormOwnerClosing: closeReason = "FormOwnerClosing"; break; case CloseReason.MdiFormClosing: closeReason = "MdiFormClosing"; break; case CloseReason.UserClosing: closeReason = "UserClosing"; break; case CloseReason.None: default: closeReason = "Unknown"; break; } WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format("SPC NewPos Installer Update Stop [{0}]", closeReason)); } catch (Exception ex) { WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , ex.Message); } } private void frmStart_Shown(object sender, EventArgs e) { try { this.Visible = false; if (string.IsNullOrWhiteSpace(_sourcePath)) return; if (string.IsNullOrWhiteSpace(_targetPath)) return; if (string.IsNullOrWhiteSpace(_executeFile)) return; //POS Program 강제 종료 Thread.Sleep(3000); var fileName = Path.GetFileNameWithoutExtension(_executeFile); for (var i = 0; i < 10; i++) { Process[] arProcess = Process.GetProcessesByName(fileName); if (arProcess.Length == 0) break; try { arProcess[0].Kill(); } catch { } Thread.Sleep(1000); } string srcFile = Path.Combine(_sourcePath, _executeFile); string desFile = Path.Combine(_targetPath, _executeFile); File.Copy(srcFile, desFile, true); Thread.Sleep(3000); WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format("Copy File {0} => {1}", srcFile, desFile)); Process.Start(desFile); WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , string.Format("Process.Start {0}", desFile)); } catch (Exception ex) { WriteLog(LogLevel.Exception , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , ex.Message); } finally { //WriteLog(LogLevel.trace // , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." // + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" // , "SPC NewPos Installer Update Exit"); Application.Exit(); } } private void WriteLog(LogLevel logLevel, string function, string msg) { try { string levelName = LogLevelName[(int)logLevel]; string logMsg = string.Format("{0:yyyy/MM/dd HH:mm:ss.fff} [{1}] {2} [{3:000000}] {4}" , DateTime.Now , LogLevelName[(int)logLevel].PadRight(10) , PadRightEx(function, 40) , msg.Length , msg ); string fileName = string.Format("{0}_{1}.log", "NewPosInstaller", DateTime.Now.ToString("yyMMdd")); string filePath = Path.Combine(LogDir, fileName); Directory.CreateDirectory(LogDir); // 로그 기록 bool bAppend = System.IO.File.Exists(filePath); using (System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, bAppend, Encoding.Default)) { sw.WriteLine(logMsg); sw.Flush(); } } catch { } } private string PadRightEx(string value, int length, char padChar = ' ') { string ret = value; try { if (ret.Length > length) ret = ret.Substring(0, length); else ret = ret.PadRight(length, padChar); } catch (Exception ex) { WriteLog(LogLevel.trace , System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()" , ex.Message); } return ret; } } }