133 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Windows.Forms;
 | |
| using System.IO.Compression;
 | |
| using System.IO;
 | |
| using System.DirectoryServices;
 | |
| using System.ServiceModel.Configuration;
 | |
| 
 | |
| namespace Project
 | |
| {
 | |
|     static class Program
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 해당 응용 프로그램의 주 진입점입니다.
 | |
|         /// </summary>
 | |
|         [STAThread]
 | |
|         static void Main()
 | |
|         {
 | |
|             Application.EnableVisualStyles();
 | |
|             Application.SetCompatibleTextRenderingDefault(false);
 | |
|             // Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
 | |
|             // AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
 | |
| 
 | |
|             var fi = new System.IO.FileInfo("WebView2Runtime.zip");
 | |
|             if (fi.Exists)
 | |
|             {
 | |
|                 var existlen = 0;
 | |
|                 var webruntimepath = new System.IO.DirectoryInfo("WebView2Runtime");
 | |
|                 if (webruntimepath.Exists)
 | |
|                 {
 | |
|                     var filen = new System.IO.FileInfo("WebView2Runtime\\version.txt");
 | |
|                     if(filen.Exists)
 | |
|                     {
 | |
|                         var verstr = System.IO.File.ReadAllText(filen.FullName);
 | |
|                         int.TryParse(verstr, out existlen);
 | |
|                     }
 | |
|                 }
 | |
|                 if(existlen != fi.Length)
 | |
|                 {
 | |
|                     //fi 파일의 압축을 해제한다.
 | |
|                     var fprogress = new Dialog.fUnZip();
 | |
|                     fprogress.TopMost = true; 
 | |
|                     fprogress.Show();
 | |
|                     Application.DoEvents();
 | |
|                     try
 | |
|                     {
 | |
|                         if (webruntimepath.Exists)
 | |
|                         {
 | |
|                             fprogress.label1.Text = "기존폴더삭제";
 | |
|                             Application.DoEvents();
 | |
|                             webruntimepath.Delete(true);
 | |
| 
 | |
|              
 | |
|                         }
 | |
|                         var diruntime = new System.IO.DirectoryInfo("runtimes");
 | |
|                         if (diruntime.Exists) diruntime.Delete(true);
 | |
|                         webruntimepath.Create();
 | |
|                         diruntime.Create();
 | |
| 
 | |
|                         
 | |
|                         using (var archive = ZipFile.OpenRead(fi.FullName))
 | |
|                         {
 | |
|                             int totalFiles = archive.Entries.Count;
 | |
|                             int currentFile = 0;
 | |
|                             long totalSize = archive.Entries.Sum(e => e.Length);
 | |
|                             long extractedSize = 0;
 | |
|                             
 | |
|                             foreach (var entry in archive.Entries)
 | |
|                             {
 | |
|                                 currentFile++;
 | |
|                                 extractedSize += entry.Length;
 | |
|                                 int progress = (int)((extractedSize * 100) / totalSize);
 | |
|                                 
 | |
|                                 fprogress.label1.Text = $"압축 해제 중... ({currentFile}/{totalFiles})";
 | |
|                                 fprogress.label2.Text = $"{entry.FullName} ({progress}%)";
 | |
|                                 fprogress.progressBar1.Value = progress;
 | |
|                                 Application.DoEvents();
 | |
|                                 
 | |
|                                 string destinationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, entry.FullName);
 | |
|                                 string destinationDir = Path.GetDirectoryName(destinationPath);
 | |
|                                 
 | |
|                                 if (!Directory.Exists(destinationDir))
 | |
|                                     Directory.CreateDirectory(destinationDir);
 | |
|                                     
 | |
|                                 if (entry.Length > 0)
 | |
|                                     entry.ExtractToFile(destinationPath, true);
 | |
|                             }
 | |
|                         }
 | |
|                         
 | |
|                         System.IO.File.WriteAllText("WebView2Runtime\\version.txt", fi.Length.ToString());
 | |
|                     }
 | |
|                     catch (Exception ex)
 | |
|                     {
 | |
|                         fprogress.Hide();
 | |
|                         MessageBox.Show($"WebView2 Runtime 압축 해제 중 오류가 발생했습니다: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
 | |
|                     }
 | |
|                     finally {
 | |
|                         fprogress.Dispose();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             
 | |
|             SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
 | |
| 
 | |
|             Application.Run(new fMain());
 | |
|         }
 | |
| 
 | |
|         static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
 | |
|         {
 | |
|             string emsg = "Fatal Error(UHE)\n\n" + e.ExceptionObject.ToString();
 | |
|             Pub.log.AddE(emsg);
 | |
|             Pub.log.Flush();
 | |
|             Util.SaveBugReport(emsg);
 | |
|             var f = new fErrorException(emsg);
 | |
|             f.ShowDialog();
 | |
|             Application.ExitThread();
 | |
|         }
 | |
| 
 | |
|         static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
 | |
|         {
 | |
|             string emsg = "Fatal Error(ATE)\n\n" + e.Exception.ToString();
 | |
|             Pub.log.AddE(emsg);
 | |
|             Pub.log.Flush();
 | |
|             Util.SaveBugReport(emsg);
 | |
|             var f = new fErrorException(emsg);
 | |
|             f.ShowDialog();
 | |
|             Application.ExitThread();
 | |
|         }
 | |
|     }
 | |
| }
 | 
