using System; using System.Data; using System.IO; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; using System.Data.SqlClient; using System.ServiceProcess; using System.Collections; using System.Collections.Specialized; using System.Configuration; using Microsoft.Win32; using System.Drawing; namespace PosStart { /// /// frmPosStart /// public partial class frmPosStart : Form { #region 변수 선언 /// /// PROCESS_INFORMATION /// public struct PROCESS_INFORMATION { /// hProcess public IntPtr hProcess; /// hThread public IntPtr hThread; /// dwProcessId public uint dwProcessId; /// dwThreadId public uint dwThreadId; } /// /// STARTUPINFO /// public struct STARTUPINFO { /// cb public uint cb; /// lpReserved public string lpReserved; /// lpDesktop public string lpDesktop; /// lpTitle public string lpTitle; /// dwX public uint dwX; /// dwY public uint dwY; /// dwXSize public uint dwXSize; /// dwYSize public uint dwYSize; /// dwXCountChars public uint dwXCountChars; /// dwYCountChars public uint dwYCountChars; /// dwFillAttribute public uint dwFillAttribute; /// dwFlags public uint dwFlags; /// wShowWindow public short wShowWindow; /// cbReserved2 public short cbReserved2; /// lpReserved2 public IntPtr lpReserved2; /// hStdInput public IntPtr hStdInput; /// hStdOutput public IntPtr hStdOutput; /// hStdError public IntPtr hStdError; } [DllImport("kernel32.dll")] static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); #endregion #region 생성자 /// frmPosStart public frmPosStart() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); } #endregion #region 폼초기화 /// /// Load /// /// /// private void frmPosStart_Load(object sender, EventArgs e) { try { for (int i = 0; i < Screen.AllScreens.Length; i++) { if (Screen.AllScreens[i].Primary == true) // 캐셔화면 { this.Top = 0; this.Left = 0; this.Width = Screen.AllScreens[i].WorkingArea.Width; this.Height = Screen.AllScreens[i].WorkingArea.Height; break; } } // 브랜드 백이미지 로딩 DirectoryInfo directories = Directory.GetParent(Directory.GetCurrentDirectory()); string sFileName = directories.FullName + @"\CDP\CDP_COM\" + "intro_bimg000.png"; if (File.Exists(sFileName) == true) { this.BackgroundImage = Image.FromFile(sFileName); } } catch (Exception ex) { WriteLogFile("frmPosStart_Load.Exception." + ex.Message); } finally { this.Tag = "START"; } } #endregion #region 프로그램 시작 private void frmPosStart_Activated(object sender, EventArgs e) { bool bRet = false; int iMaxJob = 6; try { if (this.Tag.ToString() != "START") return; this.Tag = ""; #region 1.메인 프로그램 강제 종료 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 메인 프로그램 강제 종료 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try { //POS Program 강제 종료 Process[] arPosPgm = Process.GetProcessesByName("PosMain"); foreach (Process pPosPgm in arPosPgm) { //Thread.Sleep(2000); pPosPgm.Kill(); SetProgreeBar(1, iMaxJob); Thread.Sleep(1000); } //O2MSR 강제 종료(2017.07.03) //Process[] arO2Msr = Process.GetProcessesByName("O2MSR"); //foreach (Process pO2Msr in arO2Msr) //{ // pO2Msr.Kill(); // Thread.Sleep(1000); //} } catch (Exception ex) { WriteLogFile("frmPosStart_Activated.Exception.PosMain Force End." + ex.Message); } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 프로그램 복사 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try { #region 2.다운로드된 프로그램 파일 복사 // 현재 디렉토리 DirectoryInfo dirParent = Directory.GetParent(Directory.GetCurrentDirectory()); //#Rhee, 20180108 중국서버주소 변경 추가 start // 프로그램 버전 INI 파일 설정 CmMessage cmPosConfig2 = CmMessage.MakeMessageFromFile(dirParent.FullName + @"\INI\PosConfig.INI"); string sCommSvrIp = cmPosConfig2.GetMessage("SERVER").GetMessageValue("CommSvrIp"); string sCmpCd = cmPosConfig2.GetMessage("POS").GetMessageValue("CmpCd"); //#20180125 윈도우 자동 업데이트 해제 기능 전체 적용 start //기존 /* if (sCmpCd == "PCCN") { AutoWindowsUpdateStop(); } */ //변경 AutoWindowsUpdateStop(); //#20180125 윈도우 자동 업데이트 해제 기능 전체 적용 end if ((sCmpCd == "PCCN") && (sCommSvrIp == "118.26.25.100")) { cmPosConfig2.GetMessage("SERVER").MakeMessageOverWrite("CommSvrIp", "pos.spcchinapos.com"); cmPosConfig2.MakeFileFromMessage(dirParent.FullName + @"\INI\PosConfig.INI"); } //#Rhee, 20180108 중국서버주소 변경 추가 end //#Rhee, 20180227 미국 환경설정 변경 start if (sCmpCd == "PCUS") { cmPosConfig2.GetMessage("GLOBAL").MakeMessageOverWrite("FontFix", "SimSun"); // 기본 폰트 변경 cmPosConfig2.MakeFileFromMessage(dirParent.FullName + @"\INI\PosConfig.INI"); CmMessage cmPosDevice = CmMessage.MakeMessageFromFile(dirParent.FullName + @"\INI\PosDevice.INI"); cmPosDevice.GetMessage("ICREADER").MakeMessageOverWrite("UseFlag", "0"); // ICREADER 기본 비사용 cmPosDevice.MakeFileFromMessage(dirParent.FullName + @"\INI\PosDevice.INI"); } //#Rhee, 20180227 미국 환경설정 변경 end // 프로그램 적용파일 존재시 if (Directory.Exists(dirParent.FullName + @"\DOWN\PGM\")) { // BIN 백업 (BIN ==> BACK/BIN) // MoonSeokWoo //*** MoonSeokWoo 2017.12.19 Edit Bin 폴더 백업 제거. WriteLogFile("frmPosStart_Activated.BinBack.Start : Step1 NoBackUp"); //bRet = DirectoryCopy(dirParent.FullName + @"\BIN\", dirParent.FullName + @"\BACK\BIN\", "", false, null); bRet = true; //백업 성공 유무와 관계 없이 진행 해야 하므로 무조건 true. WriteLogFile("frmPosStart_Activated.BinBack.Start : Step1 Result -> After 2017.12.19 :" + bRet.ToString()); //*** MoonSeokWoo 2017.12.19 Edit End if (bRet == true) { // 다운로드된 프로그램 파일 복사 // MoonSeokWoo WriteLogFile("frmPosStart_Activated.BinBack.Start : Step2"); bRet = DirectoryCopy(dirParent.FullName + @"\DOWN\PGM\", dirParent.FullName + @"\", "", false, "PosStart.exe"); //bRet = DirectoryCopy(dirParent.FullName + @"\DOWN\PGM\", dirParent.FullName + @"\", "", true, "PosStart.exe"); WriteLogFile("frmPosStart_Activated.BinBack.Start : Step2 Result -> After 2017.12.19 " + bRet.ToString()); //*** MoonSeokWoo 2017.12.19 복사 실패시 복원하지 않음 ( 복원할 대상이 존재하지 않음). bRet = true; WriteLogFile("frmPosStart_Activated.BinBack.Start : Step3 Result -> After 2017.12.19 absolute True! "); //*** MoonSeokWoo 2017.12.19 복사 실패는 없다고 보고 감. if (bRet != true) { // 복사 오류시 백업복구 WriteLogFile("tmrStartProc.Exception.Pos Program Rollback." + " 복사 오류로 인해 백업 복구"); DirectoryCopy(dirParent.FullName + @"\BACK\BIN\", dirParent.FullName + @"\BIN\", "", true, "PosStart.exe"); } else { try { // 복사 오류 확인을 위해 폴더 삭제 주석 처리(20170927) // 폴더 삭제 //Directory.Delete(dirParent.FullName + @"\DOWN\PGM\", true); if(Directory.Exists(dirParent.FullName + @"\DOWN\PGM_BACK\") == true) { Directory.Delete(dirParent.FullName + @"\DOWN\PGM_BACK\", true); System.Threading.Thread.Sleep(300); } Directory.Move(dirParent.FullName + @"\DOWN\PGM\", dirParent.FullName + @"\DOWN\PGM_BACK\"); System.Threading.Thread.Sleep(1000); } catch(Exception ex) { } // 프로그램 버전 INI 파일 설정 CmMessage cmPosConfig = CmMessage.MakeMessageFromFile(dirParent.FullName + @"\INI\PosConfig.INI"); string sVer = cmPosConfig.GetMessage("PGMVER").GetMessageValue("ProgramVer_Update"); string sSeq = cmPosConfig.GetMessage("PGMVER").GetMessageValue("ProgramVerSeq_Update"); if (sVer.Length > 0) { cmPosConfig.GetMessage("PGMVER").MakeMessageOverWrite("ProgramVer10", sVer); cmPosConfig.GetMessage("PGMVER").MakeMessageOverWrite("ProgramVerSeq10", sSeq); cmPosConfig.GetMessage("PGMVER").MakeMessageOverWrite("ProgramVer_Update", ""); cmPosConfig.GetMessage("PGMVER").MakeMessageOverWrite("ProgramVerSeq_Update", ""); cmPosConfig.MakeFileFromMessage(dirParent.FullName + @"\INI\PosConfig.INI"); } } } } SetProgreeBar(2, iMaxJob); #endregion WriteLogFile("frmPosStart_Activated.Start : Step4 Result -> After 2017.12.19 Add "); #region 3.다운로드된 동영상/이미지 파일 복사 // 다운로드된 동영상/이미지 파일 복사 DirectorySubCopy(dirParent.FullName + @"\DOWN\CDP\CAMPAIGN\", dirParent.FullName + @"\CDP\CAMPAIGN\", "", true); DirectorySubCopy(dirParent.FullName + @"\DOWN\CDP\CDP_COM\", dirParent.FullName + @"\CDP\CDP_COM\", "", true); DirectorySubCopy(dirParent.FullName + @"\DOWN\CDP\CUSTOMER\", dirParent.FullName + @"\CDP\CUSTOMER\", "", true); DirectorySubCopy(dirParent.FullName + @"\DOWN\CDP\ITEM\", dirParent.FullName + @"\CDP\ITEM\", "", true); DirectorySubCopy(dirParent.FullName + @"\DOWN\CDP\TEST_MODE\", dirParent.FullName + @"\CDP\TEST_MODE\", "", true); SetProgreeBar(3, iMaxJob); #endregion WriteLogFile("frmPosStart_Activated.End : Step4 Result -> After 2017.12.19 Add "); WriteLogFile("frmPosStart_Activated.Start : Step5 Result -> After 2017.12.19 Add "); #region 4. 인증버전 판단 프로그램 복사 CmMessage cmDeviceInfo = CmMessage.MakeMessageFromFile(dirParent.FullName + @"\INI\PosDevice.INI"); string sICReaderUseYn = cmDeviceInfo.GetMessage("ICREADER").GetMessageValue("UseFlag"); //#20171122 IC, MSR폴더에 있는 SpcnPos로 시작하는 파일 삭제 start DirectoryFileDelete(dirParent.FullName + @"\BIN\IC\", "SpcnPos"); DirectoryFileDelete(dirParent.FullName + @"\BIN\MSR\", "SpcnPos"); //#20171122 IC, MSR폴더에 있는 SpcnPos로 시작하는 파일 삭제 end // 인증버전 판단 if (sICReaderUseYn == "1") { // ic폴더에 있는 Cosmos로 시작하는 dll 삭제 (본 파일은 실제 bin에 포함되어 있음) DirectoryFileDelete(dirParent.FullName + @"\BIN\IC\", "Cosmos"); // update 적용 DirectoryCopy(dirParent.FullName + @"\BIN\IC\", dirParent.FullName + @"\BIN\", "", false, null); // IC 버전 } else { // msr폴더에 있는 Cosmos로 시작하는 dll 삭제 (본 파일은 실제 bin에 포함되어 있음) DirectoryFileDelete(dirParent.FullName + @"\BIN\MSR\", "Cosmos"); // update 적용 DirectoryCopy(dirParent.FullName + @"\BIN\MSR\", dirParent.FullName + @"\BIN\", "", false, null); // MSR 버전 } SetProgreeBar(4, iMaxJob); #endregion WriteLogFile("frmPosStart_Activated.End : Step5 Result -> After 2017.12.19 Add "); #region 5.OCX 등록 처리 // 넥사크로 DLL 삭제 if (File.Exists(dirParent.FullName + @"\BIN\nexacroax14.dll") == true) File.Delete(dirParent.FullName + @"\BIN\nexacroax14.dll"); // OCX 등록 처리 DllRegSvr32(dirParent.FullName + @"\BIN"); DllRegSvr32(@"C:\Program Files\OPOS\CommonCO"); DllRegSvr32(@"C:\Program Files (x86)\OPOS\CommonCO"); // 넥사크로 DLL 등록 DllRegSvr32(@"C:\Program Files\nexacro\14"); DllRegSvr32(@"C:\Program Files (x86)\nexacro\14"); // grayber@20180115 ADODB.DLL 추가 start //#20180223 인천공항T2 연동 정보 설정된 경우만 등록 start //기존 DLLGacutil(dirParent.FullName + @"\BIN"); //변경 /* if (File.Exists(dirParent.FullName + @"\INI\IncheonAirPort.INI")) { CmMessage cmIncheonAirPort = CmMessage.MakeMessageFromFile(dirParent.FullName + @"\INI\IncheonAirPort.INI"); string sAirportIP = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportIP"); string sAirportUser = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportUser"); string sAirportPass = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportPass"); string sAirportComp = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportComp"); string sAirportStore = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportStore"); string sAirportPosNo = cmIncheonAirPort.GetMessage("INCHEONAIRPORT").GetMessageValue("AirportPosNo"); if ((sAirportIP != "" && sAirportIP != null) && (sAirportUser != "" && sAirportIP != null) && (sAirportPass != "" && sAirportIP != null) && (sAirportComp != "" && sAirportIP != null) && (sAirportStore != "" && sAirportIP != null) && (sAirportPosNo != "" && sAirportIP != null)) { DLLGacutil(dirParent.FullName + @"\BIN"); } } */ //#20180223 인천공항T2 연동 정보 설정된 경우만 등록 end // grayber@20180115 ADODB.DLL 추가 start SetProgreeBar(5, iMaxJob); #endregion //#20180309 불필요한파일삭제 start,phj #region 불필요한 파일 삭제 /* if (UnnecessaryFileDelete() == true) { WriteLogFile("frmPosStart_Activated.End : UnnecessaryFileDelete Result true"); } else { WriteLogFile("frmPosStart_Activated.End : UnnecessaryFileDelete Result false"); } */ #endregion //#20180309 불필요한파일삭제 end,phj //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 start WriteLogFile("frmPosStart_Activated.Start : Step6 Result -> After 2018.07.24 Add "); #region if (UnnecessaryExeFileDelete() == true) { WriteLogFile("frmPosStart_Activated.Start : Step6 Result -> true "); } else { WriteLogFile("frmPosStart_Activated.Start : Step6 Result -> false "); } #endregion WriteLogFile("frmPosStart_Activated.End : Step6 Result -> After 2018.07.24 Add "); //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 end } catch (Exception ex) { WriteLogFile("frmPosStart_Activated.Exception.Pos Program Copy." + ex.Message); } #region 6.POS 프로그램 실행 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // POS 프로그램 실행 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try { Thread.Sleep(1000); //POS POS Program 실행 ProcessStartInfo startInfo = new ProcessStartInfo("PosMain.exe"); //startInfo.WindowStyle = ProcessWindowStyle.Maximized; startInfo.CreateNoWindow = false; Process.Start(startInfo); SetProgreeBar(6, iMaxJob); } catch (Exception ex) { WriteLogFile("frmPosStart_Activated.Exception.PosMain Start." + ex.Message); } #endregion } catch (Exception ex) { WriteLogFile("frmPosStart_Activated.Exception." + ex.Message); } finally { this.Close(); Application.Exit(); } } #endregion //#20180309 불필요한파일삭제 start,phj #region 불필요한파일삭제 /* public bool UnnecessaryFileDelete() { bool bRet = false; try { // 현재 디렉토리 DirectoryInfo dirParent = Directory.GetParent(Directory.GetCurrentDirectory()); // 대상 폴더 string sSrcPath = dirParent.FullName + @"\BIN\"; if (Directory.Exists(sSrcPath)) { DirectoryInfo di = new DirectoryInfo(sSrcPath); if (di.Exists) { foreach (FileInfo fi in di.GetFiles()) { string sFilExtension = Path.GetExtension(sSrcPath + fi.Name); //확장자가 .pdb 또는 .XML이거나 //실행파일이 NewPosInstaller.exe 또는 NewPosInstallerStart.exe 또는 PosDesign800.exe //현재 BIN 폴더에서 삭제하도록 함 if (fi.Extension.ToLower().CompareTo(".pdb") == 0 || fi.Extension.ToLower().CompareTo(".xml") == 0 || fi.Name == "PosDesign800.exe" || fi.Name == "NewPosInstaller.exe" || fi.Name == "NewPosInstallerStart.exe") { fi.Delete(); } if (fi.Name == "PosDesign800.exe" || fi.Name == "NewPosInstaller.exe" || fi.Name == "NewPosInstallerStart.exe") { fi.Delete(); } } } } else { WriteLogFile("UnnecessaryFileDelete -> BIN 폴더가 존재하지 않습니다."); } bRet = true; } catch (Exception ex) { WriteLogFile("UnnecessaryFileDelete -> Exception : " + ex.Message); bRet = false; } return bRet; } */ #endregion //#20180309 불필요한파일삭제 end,phj //#Rhee, 20180111 윈도우 자동업데이트 정지 추가 start #region 윈도우 자동업데이트 정지 /// /// 윈도우 자동업데이트 정지 /// private void AutoWindowsUpdateStop() { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // BAT 프로그램 실행 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try { Thread.Sleep(1000); //#20180209 윈도우 자동업데이트 정지 기능 이미 적용된 경우 넘어가도록 수정 start //기존 /* //윈도우즈 자동업데이트 정지 추가 WriteLogFile("Directory GetCurrentDirectory : " + Directory.GetCurrentDirectory().ToString()); if (File.Exists(Directory.GetCurrentDirectory() + @"\AutoUpdateStop.bat") != true) { ProcessStartInfo cmdinfo = new ProcessStartInfo("AutoUpdateStop.bat"); cmdinfo.WorkingDirectory = @"C:\SPC\POS\BIN\"; cmdinfo.CreateNoWindow = false; cmdinfo.Verb = "runas"; cmdinfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(cmdinfo); } else { ProcessStartInfo cmdinfo = new ProcessStartInfo(); Process process = new Process(); cmdinfo.CreateNoWindow = true; cmdinfo.UseShellExecute = false; cmdinfo.RedirectStandardOutput = true; cmdinfo.RedirectStandardInput = true; cmdinfo.RedirectStandardError = true; cmdinfo.FileName = @"cmd"; cmdinfo.Verb = "runas"; process.StartInfo = cmdinfo; process.Start(); process.StandardInput.Write(@"sc Stop WuauServ " + Environment.NewLine); process.StandardInput.Write(@"REG add ""HKLM\SYSTEM\CurrentControlSet\services\wuauserv"" /v Start /t REG_DWORD /d 4 /f " + Environment.NewLine); process.StandardInput.Close(); string resultValue = process.StandardOutput.ReadToEnd(); process.WaitForExit(); process.Close(); Console.WriteLine(resultValue); } */ //변경 //이미 윈도우 자동업데이트 해제한 경우 실행하지 않는다. var keyName = @"SYSTEM\CurrentControlSet\services\wuauserv"; string sRegData = ""; using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName)) { sRegData = key.GetValue("Start", "0").ToString(); if (sRegData == "4") { WriteLogFile("AutoUpdateStop_Activated : already"); return; } } string dirPath = Directory.GetCurrentDirectory(); //윈도우즈 자동업데이트 정지 추가 WriteLogFile("Directory GetCurrentDirectory : " + dirPath.ToString()); if (File.Exists(dirPath + @"\AutoUpdateStop.bat") == true) { ProcessStartInfo cmdinfo = new ProcessStartInfo("AutoUpdateStop.bat"); cmdinfo.WorkingDirectory = dirPath; cmdinfo.CreateNoWindow = false; cmdinfo.Verb = "runas"; cmdinfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(cmdinfo); } else { ProcessStartInfo cmdinfo = new ProcessStartInfo(); Process process = new Process(); cmdinfo.CreateNoWindow = true; cmdinfo.UseShellExecute = false; cmdinfo.RedirectStandardOutput = true; cmdinfo.RedirectStandardInput = true; cmdinfo.RedirectStandardError = true; cmdinfo.FileName = @"cmd"; cmdinfo.Verb = "runas"; process.StartInfo = cmdinfo; process.Start(); process.StandardInput.Write(@"sc Stop WuauServ " + Environment.NewLine); process.StandardInput.Write(@"REG add ""HKLM\SYSTEM\CurrentControlSet\services\wuauserv"" /v Start /t REG_DWORD /d 4 /f " + Environment.NewLine); process.StandardInput.Close(); string resultValue = process.StandardOutput.ReadToEnd(); process.WaitForExit(); process.Close(); Console.WriteLine(resultValue); } //#20180209 윈도우 자동업데이트 정지 기능 이미 적용된 경우 넘어가도록 수정 end WriteLogFile("AutoUpdateStop_Activated : AutoUpdateStop.bat Run - OK"); } catch (Exception ex) { WriteLogFile("AutoUpdateStop_Activated.Exception.AutoUpdateStop Run." + ex.Message); } } #endregion //#Rhee, 20180111 윈도우 자동업데이트 정지 추가 end #region 디렉토리의 모든 파일복사 처리 /// /// 디렉토리의 모든 파일복사 처리 /// /// /// /// /// /// /// public bool FileCopy(string sFileName, string sSrcPath, string sDstPath, string sBackPath, bool bDelete) { bool bRet = false; try { try { if (sBackPath.Length > 0) { File.Delete(sBackPath + sFileName); File.Move(sDstPath + sFileName, sBackPath + sFileName); // 기존파일 이동 처리 } } catch(Exception e) { WriteLogFile("FileCopy.Exception.1." + e.Message); WriteLogFile("FileCopy.Exception.1.FileName : " + sFileName); return bRet; } File.Copy(sSrcPath + sFileName, sDstPath + sFileName, true); // 파일복사 처리 if ( bDelete == true) File.Delete(sSrcPath + sFileName); bRet = true; } catch (Exception ex) { WriteLogFile("FileCopy.Exception.2." + ex.Message); WriteLogFile("FileCopy.Exception.2.FileName : " + sFileName); bRet = false; } return bRet; } #endregion #region 디렉토리 복사 /// /// 디렉토리 복사 /// /// /// /// /// /// /// public bool DirectoryCopy(string sSrcPath, string sDstPath, string sBackPath, bool bDelete, string sNotCopyFileName) { bool bRet = false; try { if (Directory.Exists(sDstPath) == false) Directory.CreateDirectory(sDstPath); if (sBackPath.Length > 0 && Directory.Exists(sBackPath) == false) Directory.CreateDirectory(sBackPath); DirectoryInfo di = new DirectoryInfo(sSrcPath); if (di.Exists) { foreach (FileInfo fi in di.GetFiles()) { //*** MoonSeokWoo 2017.12.20 Edit 파일비교 대문자로 변경해서 하도록 수정. if (fi.Name.ToUpper() == "lpk.dll".ToUpper()) continue; // 삭제되지 않은 파일 존재시 오류처리 되어 Skip //*** MoonSeokWoo 2017.12.20 Edit 파일비교 대문자로 변경해서 하도록 수정. fi.Name == sNotCopyFileName if(sNotCopyFileName != null) { if (sNotCopyFileName != "" && fi.Name.ToUpper() == sNotCopyFileName.ToUpper()) continue; } bRet = FileCopy(fi.Name, sSrcPath, sDstPath, sBackPath, bDelete); if (bRet != true) { //MoonSeokWoo WriteLogFile("frmPosStart_DirectoryCopy.GetFiles fail -> " + fi.Name); //사용중인 파일이 있다면 로그만 남기고 계속 진행. //break; } } foreach (DirectoryInfo fi in di.GetDirectories()) { //*** 지정된 폴더는 복사 제외 spcn요청 if (fi.Name.ToUpper() == "spcn_log".ToUpper() || fi.Name.ToUpper() == "spcncat_log".ToUpper() || fi.Name.ToUpper() == "spcndg_log".ToUpper() || fi.Name.ToUpper() == "SpcnLog".ToUpper() || fi.Name.ToUpper() == "spcnsecu_log".ToUpper() || fi.Name.ToUpper() == "dualPlayerLog".ToUpper() || fi.Name.ToUpper() == "log".ToUpper() || fi.Name.ToUpper() == "PipeLog".ToUpper() || fi.Name.ToUpper() == "O2MsrLog".ToUpper()) continue; //*** 지정된 폴더는 복사 제외 spcn요청 bRet = DirectoryCopy(sSrcPath + fi.Name + @"\", sDstPath + fi.Name + @"\", sBackPath.Length == 0 ? "" : sBackPath + fi.Name + @"\", bDelete, sNotCopyFileName); if (bRet != true) { //MoonSeokWoo WriteLogFile("frmPosStart_DirectoryCopy.GetDirectories fail -> " + fi.Name); //*** 2017.12.19 //복사 실패한 폴더 존재시 다음 폴더 작업 하지 않고 넘어가는 부분 수정 //break; } try { if (bDelete == true) Directory.Delete(sSrcPath + fi.Name); } catch(Exception ex) { WriteLogFile("Directory Delete Exception in DirectoryCopy Method - " + ex.Message); } } //if (bDelete == true) Directory.Delete(sSrcPath); } bRet = true; } catch (Exception ex) { WriteLogFile("DirectoryCopy.Exception." + ex.Message); bRet = false; } return bRet; } #endregion #region 디렉토리 복사 (하위폴더의 파일은 폴더생성 없이 그대로 복사) /// /// 디렉토리 복사 (하위폴더의 파일은 폴더생성 없이 그대로 복사) /// /// /// /// /// public void DirectorySubCopy(string sSrcPath, string sDstPath, string sBackPath, bool bDelete) { bool bRet = false; try { if (Directory.Exists(sDstPath) == false) Directory.CreateDirectory(sDstPath); if (sBackPath.Length > 0 && Directory.Exists(sBackPath) == false) Directory.CreateDirectory(sBackPath); DirectoryInfo di = new DirectoryInfo(sSrcPath); if (di.Exists) { foreach (FileInfo fi in di.GetFiles()) { bRet = FileCopy(fi.Name, sSrcPath, sDstPath, sBackPath, bDelete); if (bRet == false) WriteLogFile("frmPosStart_DirectorySubCopy.GetFiles fail -> " + fi.Name); } foreach (DirectoryInfo fi in di.GetDirectories()) { //DirectorySubCopy(sSrcPath + fi.Name + @"\", sDstPath + fi.Name + @"\", sBackPath.Length == 0 ? "" : sBackPath + fi.Name + @"\", bDelete); DirectorySubCopy(sSrcPath + fi.Name + @"\", sDstPath, sBackPath.Length == 0 ? "" : sBackPath + fi.Name + @"\", bDelete); try { if (bDelete == true) Directory.Delete(sSrcPath + fi.Name); } catch(Exception ex) { WriteLogFile("frmPosStart_DirectorySubCopy.GetDirectories fail -> " + fi.Name); WriteLogFile("Directory Delete Exception in DirectorySubCopy Method - " + ex.Message); } } } } catch (Exception ex) { WriteLogFile("DirectoryCopy.Exception." + ex.Message); } } #endregion #region 폴더의 특정이름으로 시작하는 파일 삭제 /// /// 폴더의 특정이름으로 시작하는 파일 삭제 /// /// /// private void DirectoryFileDelete(string sFullPath, string sDeleteFileName) { try { string[] fFilePath = Directory.GetFiles(sFullPath); foreach (string fFileName in fFilePath) { if (fFileName.Contains(sDeleteFileName) == true) { File.Delete(fFileName); } } } catch (Exception ex) { //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 start //기존 //WriteLogFile("DirectoryFileDelete.Exception." + ex.Message); //변경 WriteLogFile("DirectoryFileDelete.Exception. [PATH:" + sFullPath + ", FILENAME: " + sDeleteFileName + "]" + ex.Message); //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 end } } #endregion #region DLL, OCX 등록 처리 /// /// DLL, OCX 등록 처리 /// private bool DllRegSvr32(string sPath) { try { DirectoryInfo di = new DirectoryInfo(sPath); if (di.Exists) { foreach (FileInfo fi in di.GetFiles()) { string sFileName = fi.Name; if (sFileName.ToUpper().Trim() == "XCTRANSACTION2.DLL") continue; if (sFileName.Substring(sFileName.Length - 4, 4).ToUpper() == ".OCX" || sFileName.Substring(sFileName.Length - 4, 4).ToUpper() == ".DLL" ) Process.Start("regsvr32.exe", "/s \"" + sPath + @"\" + sFileName + "\""); //string aaa = "regsvr32.exe /s \"" + sPath + @"\" + sFileName + "\""; } } return true; } catch (Exception ex) { WriteLogFile("DllRegSvr32.Exception." + ex.Message); } return false; } // grayber@20180115 ADODB.DLL 추가 start private bool DLLGacutil(string sPath) { bool bRes = false; try { // grayber@20180115 명령창 나오지 않도록 개선 start - 명령창이 출력되지 않도록 개선 // 기존 // Process.Start(sPath + @"\gacutil.exe", "/i adodb.dll"); // 변경 ProcessStartInfo psi = new ProcessStartInfo(sPath + @"\gacutil.exe", "/f /i " + sPath + @"\adodb.dll"); psi.UseShellExecute = false; psi.CreateNoWindow = true; var psRes = Process.Start(psi); if (psRes.ExitCode != 0) { WriteLogFile(string.Format("DLLGacutil. adodb.dll exitCode: {0}", psRes.ExitCode)); // DEBUG 용 코드 } else { bRes = true; } // grayber@20180115 명령창 나오지 않도록 개선 end } catch(Exception ex) { WriteLogFile("DLLGacutil.Exception." + ex.Message); } return bRes; } // grayber@20180115 ADODB>DLL 추가 end private string GetAppSetting(string strKey, string sDefault) { string strValue = ""; try { strValue = System.Configuration.ConfigurationManager.AppSettings[strKey]; } catch { } if (strValue == null || strValue == "") strValue = sDefault; return strValue; } #endregion #region 로그파일 저장 /// /// 로그파일 저장 /// /// /// public bool WriteLogFile(string sFileData) { bool bRet = false; try { // 현재 디렉토리 DirectoryInfo directories = Directory.GetParent(Directory.GetCurrentDirectory()); // string sFileName = directories.FullName + @"\LOG\PosStart" + DateTime.Now.ToString("yyMMdd") + ".log"; FileStream fs = new FileStream(sFileName, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); try { sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + sFileData); sw.Flush(); bRet = true; } catch { } finally { sw.Close(); fs.Close(); } } catch { return false; } return bRet; } #endregion #region 상태 진행바 /// /// 상태 진행바 /// /// /// private void SetProgreeBar(int iValue, int iMaxValue) { try { double nPercent = ((double)iValue / (double)iMaxValue) * 100; pbWork.Visible = true; pbWork.Minimum = 0; pbWork.Maximum = 100; pbWork.Value = (int)Math.Round(nPercent, 0, MidpointRounding.AwayFromZero); pbWork.Update(); lblCount.Visible = true; lblCount.Text = "POS program check . . . (" + iValue.ToString() + "/" + iMaxValue.ToString() + ") " + Math.Round(nPercent, 0, MidpointRounding.AwayFromZero).ToString() + " %"; lblCount.Update(); //System.Threading.Thread.Sleep(300); Application.DoEvents(); } catch { return; } } #endregion //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 start /// /// UnnecessaryExeFileDelete /// public bool UnnecessaryExeFileDelete() { bool bRet = false; try { // 바탕화면에 구포스LOGIN 삭제 string sDeskTopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\"; if (Directory.Exists(sDeskTopPath)) { DirectoryFileDelete(sDeskTopPath, "LOGIN.exe"); } // 구포스 폴더에 아래 실행파일 삭제 string sOldPosSrcPath = @"C:\SPCPOS\EXE\"; if (Directory.Exists(sOldPosSrcPath)) { DirectoryFileDelete(sOldPosSrcPath, "InfraDownloader.exe"); DirectoryFileDelete(sOldPosSrcPath, "InfraInstaller.exe"); DirectoryFileDelete(sOldPosSrcPath, "NewPosInstaller.exe"); } // 구포스 폴더에 PLOGIN 백업하고 기존파일 삭제 DirectoryInfo di = new DirectoryInfo(sOldPosSrcPath); if (di.Exists) { foreach (FileInfo fi in di.GetFiles()) { if (fi.Name == "PLOGIN.exe") { File.Move(sOldPosSrcPath + "\\" + fi.Name, sOldPosSrcPath + "\\" + "back_" + fi.Name); // 기존파일 이동 처리 fi.Delete(); } } } // 차세대 폴더에 아래 실행파일 삭제 DirectoryInfo NewPosdirParent = Directory.GetParent(Directory.GetCurrentDirectory()); // 현재 디렉토리 string sNewPosSrcPath = NewPosdirParent.FullName + @"\BIN\"; // 대상 폴더 if (Directory.Exists(sNewPosSrcPath)) { DirectoryFileDelete(sNewPosSrcPath, "InfraDownloader.exe"); DirectoryFileDelete(sNewPosSrcPath, "InfraInstaller.exe"); DirectoryFileDelete(sNewPosSrcPath, "NewPosInstaller.exe"); } bRet = true; } catch (Exception ex) { WriteLogFile("UnnecessaryExeFileDelete.Exception. " + ex.Message); bRet = false; } return bRet; } //#15993 PB 강동역_환경설정 세팅 변경된 원인파악 요청 end } }