spc-kiosk-pb/Window/PosStart/frmPosStart.cs
2019-06-16 14:12:09 +09:00

1080 lines
48 KiB
C#

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
{
/// <summary>
/// frmPosStart
/// </summary>
public partial class frmPosStart : Form
{
#region
/// <summary>
/// PROCESS_INFORMATION
/// </summary>
public struct PROCESS_INFORMATION
{
/// <summary> hProcess </summary>
public IntPtr hProcess;
/// <summary> hThread </summary>
public IntPtr hThread;
/// <summary> dwProcessId </summary>
public uint dwProcessId;
/// <summary> dwThreadId </summary>
public uint dwThreadId;
}
/// <summary>
/// STARTUPINFO
/// </summary>
public struct STARTUPINFO
{
/// <summary> cb </summary>
public uint cb;
/// <summary> lpReserved </summary>
public string lpReserved;
/// <summary> lpDesktop </summary>
public string lpDesktop;
/// <summary> lpTitle </summary>
public string lpTitle;
/// <summary> dwX </summary>
public uint dwX;
/// <summary> dwY </summary>
public uint dwY;
/// <summary> dwXSize </summary>
public uint dwXSize;
/// <summary> dwYSize </summary>
public uint dwYSize;
/// <summary> dwXCountChars </summary>
public uint dwXCountChars;
/// <summary> dwYCountChars </summary>
public uint dwYCountChars;
/// <summary> dwFillAttribute </summary>
public uint dwFillAttribute;
/// <summary> dwFlags </summary>
public uint dwFlags;
/// <summary> wShowWindow </summary>
public short wShowWindow;
/// <summary> cbReserved2 </summary>
public short cbReserved2;
/// <summary> lpReserved2 </summary>
public IntPtr lpReserved2;
/// <summary> hStdInput </summary>
public IntPtr hStdInput;
/// <summary> hStdOutput </summary>
public IntPtr hStdOutput;
/// <summary> hStdError </summary>
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
/// <summary> frmPosStart </summary>
public frmPosStart()
{
InitializeComponent();
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
//this.UpdateStyles();
}
#endregion
#region
/// <summary>
/// Load
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
/// <summary>
/// 윈도우 자동업데이트 정지
/// </summary>
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
/// <summary>
/// 디렉토리의 모든 파일복사 처리
/// </summary>
/// <param name="sFileName"></param>
/// <param name="sSrcPath"></param>
/// <param name="sDstPath"></param>
/// <param name="sBackPath"></param>
/// <param name="bDelete"></param>
/// <returns></returns>
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
/// <summary>
/// 디렉토리 복사
/// </summary>
/// <param name="sSrcPath"></param>
/// <param name="sDstPath"></param>
/// <param name="sBackPath"></param>
/// <param name="bDelete"></param>
/// <param name="sNotCopyFileName"></param>
/// <returns></returns>
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 ( )
/// <summary>
/// 디렉토리 복사 (하위폴더의 파일은 폴더생성 없이 그대로 복사)
/// </summary>
/// <param name="sSrcPath"></param>
/// <param name="sDstPath"></param>
/// <param name="sBackPath"></param>
/// <param name="bDelete"></param>
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
/// <summary>
/// 폴더의 특정이름으로 시작하는 파일 삭제
/// </summary>
/// <param name="sFullPath"></param>
/// <param name="sDeleteFileName"></param>
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
/// <summary>
/// DLL, OCX 등록 처리
/// </summary>
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
/// <summary>
/// 로그파일 저장
/// </summary>
/// <param name="sFileData"></param>
/// <returns></returns>
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
/// <summary>
/// 상태 진행바
/// </summary>
/// <param name="iValue"></param>
/// <param name="iMaxValue"></param>
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
/// <summary>
/// UnnecessaryExeFileDelete
/// </summary>
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
}
}