메뉴얼 파일 압축 해제 관련 기능 추가

This commit is contained in:
2025-12-11 00:50:51 +09:00
parent 132ddc6495
commit 1fd7c25c8d
11 changed files with 815 additions and 385 deletions

View File

@@ -31,6 +31,8 @@
<ApplicationIcon>002.ico</ApplicationIcon>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>ftp://tindevil.com/www/mynetapp/t4/</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
@@ -51,15 +53,13 @@
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>..\..\..\..\..\eco2\debug_2016\</OutputPath>
<OutputPath>c:\eco2\debug_2016\</OutputPath>
<DocumentationFile>
</DocumentationFile>
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42353,42354,42355</NoWarn>
@@ -128,6 +128,8 @@
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
@@ -190,6 +192,12 @@
<Compile Include="Forms_Basic\Frm_WebManual.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms_Basic\Frm_WwwrootExtract.Designer.vb">
<DependentUpon>Frm_WwwrootExtract.vb</DependentUpon>
</Compile>
<Compile Include="Forms_Basic\Frm_WwwrootExtract.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms_Basic\fSelectWeatherGroup.Designer.vb">
<DependentUpon>fSelectWeatherGroup.vb</DependentUpon>
</Compile>
@@ -517,6 +525,9 @@
<EmbeddedResource Include="Forms_Basic\Frm_WebManual.resx">
<DependentUpon>Frm_WebManual.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms_Basic\Frm_WwwrootExtract.resx">
<DependentUpon>Frm_WwwrootExtract.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms_Basic\Frm_Work.resx">
<DependentUpon>Frm_Work.vb</DependentUpon>
<SubType>Designer</SubType>
@@ -777,7 +788,7 @@
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<ProductName>.NET Framework Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">

View File

@@ -22,6 +22,7 @@ Partial Class Frm_WebManual
'코드 편집기에서는 수정하지 마세요.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Frm_WebManual))
Me.WebView21 = New Microsoft.Web.WebView2.WinForms.WebView2()
CType(Me.WebView21, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
@@ -44,6 +45,7 @@ Partial Class Frm_WebManual
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1350, 700)
Me.Controls.Add(Me.WebView21)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Frm_WebManual"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "사용자 매뉴얼"

View File

@@ -117,4 +117,24 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAAAIABsAwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAzNJ
REFUeJxVk99PHHUUxT8zO7OzC7vsLrsgQtYSaySxoUWk9oFSY1Otxvhg/J0YTXnwwUSJiX+AL/wDRquJ
0fbBVPvSaGJsQ7WKlMYallBMoA0oQmAJS9lld2WYme/3O1+zpjX0Pt6ce+7JPfcYWmv21sjk8BDwLnAY
aAMsoApc16E+/dHQmUt78cZdgpHJ4QbwLPDS8/kTTibeRs1txg1AKg/JBj+tX5RKqstSqle+ePabf/4n
GJkctoGfB3IHBp/OP0nNc/AJWKwZRLXDlhuiZUAcl3V/gqni1KwU8ti5l7+tmneUnO3PPjx4tHOAsgoQ
poGUJrsyikuUsu9Q8uKsVm0eSDzOQEfPwcAXX/+n4L2rp44CVz449JY9K3fwDGhWCXCzrO3Y+MLg5kod
woD7Osq055Z4LNbFh99/qqSQLzYUvH+y84hd8naoI1FhjlaVZu62QaUON5brBE4Fa/8fVLIF5lWRuY0V
Xu09Hgl88U7jcIfzLV3MuEU2YyaPRPYTIlkuBXjeLqkOTa11jMVwG3xNWjosbPqc6O5H+LK3QZBtsppZ
douUfJdk04NsB0kqlZBUm0d7xmVT9VHzb+DoOvXbW5S3m0jEk4hApi2ttWFoCPwamjyWrbj4m8CIJ1hf
lJi6hc62XZL1IWprAo8pRLAEWiOlNCwlw3ItqHVlI2mSsUOsblp4wiYac4i1x/nzry2839MQeqTabdLN
XaQiJSo7VZQMq6YUcvrv8goPNeUpliYJ7TWiER/huQhhEU1kcFpjWDET21BEgk0678+xVFxquDhvikB+
fOHmuNyXaMNy16huXSOT8bGkj21oHDOCFQRk8quk2n/F3L1FX76X0z9eaLzw5+aXz50fC3zxw9jcOE90
9ZGKNJNJhKSiipaoR9L2SccFrdYEZnGZ/gM9XC6MN7aPF0ZnzjVcQPjijV8WZq76u8HBk48e41bJIlLV
SKOOCE1IKPL7uunp7ebK9DUuzV5fAF6/J0zPfHI8KYU8L4V66s3BUxaqA62bMEyDXKrGRnmaz8a+U8AE
8FphdGbjHoK7NTh65AUl1dtKhb2hCjN32o04zwNnCqMzX+0d+BfEDZRfNsnANgAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -0,0 +1,92 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Frm_WwwrootExtract
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.lblStatus = New System.Windows.Forms.Label()
Me.progressBar = New System.Windows.Forms.ProgressBar()
Me.lblPercentage = New System.Windows.Forms.Label()
Me.lblTitle = New System.Windows.Forms.Label()
Me.SuspendLayout()
'
'lblStatus
'
Me.lblStatus.AutoSize = True
Me.lblStatus.Location = New System.Drawing.Point(30, 90)
Me.lblStatus.Name = "lblStatus"
Me.lblStatus.Size = New System.Drawing.Size(113, 12)
Me.lblStatus.TabIndex = 0
Me.lblStatus.Text = "압축 해제 준비 중..."
'
'progressBar
'
Me.progressBar.Location = New System.Drawing.Point(30, 110)
Me.progressBar.Name = "progressBar"
Me.progressBar.Size = New System.Drawing.Size(440, 30)
Me.progressBar.TabIndex = 1
'
'lblPercentage
'
Me.lblPercentage.AutoSize = True
Me.lblPercentage.Font = New System.Drawing.Font("굴림", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte))
Me.lblPercentage.Location = New System.Drawing.Point(30, 150)
Me.lblPercentage.Name = "lblPercentage"
Me.lblPercentage.Size = New System.Drawing.Size(23, 12)
Me.lblPercentage.TabIndex = 2
Me.lblPercentage.Text = "0%"
'
'lblTitle
'
Me.lblTitle.AutoSize = True
Me.lblTitle.Font = New System.Drawing.Font("굴림", 11.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte))
Me.lblTitle.Location = New System.Drawing.Point(30, 30)
Me.lblTitle.Name = "lblTitle"
Me.lblTitle.Size = New System.Drawing.Size(239, 15)
Me.lblTitle.TabIndex = 3
Me.lblTitle.Text = "매뉴얼 파일 압축 해제 중입니다"
'
'Frm_WwwrootExtract
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(500, 200)
Me.Controls.Add(Me.lblTitle)
Me.Controls.Add(Me.lblPercentage)
Me.Controls.Add(Me.progressBar)
Me.Controls.Add(Me.lblStatus)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "Frm_WwwrootExtract"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "압축 해제 중"
Me.TopMost = True
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents lblStatus As Label
Friend WithEvents progressBar As ProgressBar
Friend WithEvents lblPercentage As Label
Friend WithEvents lblTitle As Label
End Class

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,101 @@
Imports System.IO
Imports System.IO.Compression
Imports System.Threading.Tasks
Public Class Frm_WwwrootExtract
Private Sub Frm_WwwrootExtract_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Show()
Application.DoEvents()
' 폼이 로드될 때 자동으로 압축 해제 시작
ExtractWwwrootAsync()
End Sub
Private Async Sub ExtractWwwrootAsync()
Try
Dim extractPath As String = Path.Combine(Application.StartupPath, "wwwroot")
Dim zipPath As String = Path.Combine(extractPath, "wwwroot.zip")
' ZIP 파일 존재 여부 확인
If Not File.Exists(zipPath) Then
lblStatus.Text = "wwwroot.zip 파일을 찾을 수 없습니다."
MessageBox.Show("wwwroot.zip 파일이 존재하지 않습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.DialogResult = DialogResult.Cancel
Me.Close()
Return
End If
' 압축 해제 작업을 별도 Task로 실행
Await Task.Run(Sub()
ExtractZipWithProgress(zipPath, extractPath)
End Sub)
' 완료
lblStatus.Text = "압축 해제 완료!"
lblPercentage.Text = "100%"
progressBar.Value = 100
Application.DoEvents()
' 잠시 대기 후 폼 닫기
Await Task.Delay(500)
Me.DialogResult = DialogResult.OK
Me.Close()
Catch ex As Exception
lblStatus.Text = "오류 발생: " & ex.Message
MessageBox.Show("압축 해제 중 오류가 발생했습니다: " & ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.DialogResult = DialogResult.Cancel
Me.Close()
End Try
End Sub
Private Sub ExtractZipWithProgress(zipPath As String, extractPath As String)
Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
Dim totalEntries As Integer = archive.Entries.Count
Dim currentEntry As Integer = 0
For Each entry As ZipArchiveEntry In archive.Entries
currentEntry += 1
' UI 업데이트 (UI 스레드에서 실행)
Me.Invoke(Sub()
Dim percentage As Integer = CInt((currentEntry / totalEntries) * 100)
progressBar.Value = percentage
lblPercentage.Text = percentage.ToString() & "%"
lblStatus.Text = $"압축 해제 중... ({currentEntry}/{totalEntries}) {entry.Name}"
Application.DoEvents()
End Sub)
' 전체 경로 생성
Dim destinationPath As String = Path.Combine(extractPath, entry.FullName)
' 디렉토리 항목인 경우
If entry.FullName.EndsWith("/") OrElse entry.FullName.EndsWith("\") Then
Directory.CreateDirectory(destinationPath)
Continue For
End If
' 파일의 디렉토리가 없으면 생성
Dim directoryPath As String = Path.GetDirectoryName(destinationPath)
If Not Directory.Exists(directoryPath) Then
Directory.CreateDirectory(directoryPath)
End If
' 파일 추출
entry.ExtractToFile(destinationPath, True)
Next
End Using
End Sub
Private Sub Frm_WwwrootExtract_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
' 압축 해제가 진행 중일 때는 폼을 닫을 수 없도록 설정 (사용자가 X 버튼을 누른 경우)
If e.CloseReason = CloseReason.UserClosing AndAlso progressBar.Value < 100 Then
e.Cancel = True
MessageBox.Show("압축 해제가 진행 중입니다. 잠시만 기다려 주세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
End Class

View File

@@ -91,7 +91,7 @@ Partial Class MdiMain
Me.CloseAllToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ArrangeIconsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.btcustomprofile = New System.Windows.Forms.ToolStripMenuItem()
Me.ManualToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.btManual = New System.Windows.Forms.ToolStripMenuItem()
Me.TreeView1 = New System.Windows.Forms.TreeView()
Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.그룹추가ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
@@ -179,7 +179,7 @@ Partial Class MdiMain
'MenuStrip1
'
Me.MenuStrip1.Font = New System.Drawing.Font("돋움", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte))
Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ReportToolStripMenuItem, Me.건물개요ToolStripMenuItem, Me.환경설정ToolStripMenuItem, Me.bt_계산결과, Me.결과그래프ToolStripMenuItem, Me.정보ToolStripMenuItem1, Me.bt_etc, Me.WindowsMenu, Me.btcustomprofile, Me.ManualToolStripMenuItem})
Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ReportToolStripMenuItem, Me.건물개요ToolStripMenuItem, Me.환경설정ToolStripMenuItem, Me.bt_계산결과, Me.결과그래프ToolStripMenuItem, Me.정보ToolStripMenuItem1, Me.bt_etc, Me.WindowsMenu, Me.btcustomprofile, Me.btManual})
Me.MenuStrip1.Location = New System.Drawing.Point(0, 0)
Me.MenuStrip1.MdiWindowListItem = Me.WindowsMenu
Me.MenuStrip1.Name = "MenuStrip1"
@@ -555,12 +555,13 @@ Partial Class MdiMain
Me.btcustomprofile.Text = "커스텀프로필"
Me.btcustomprofile.Visible = False
'
'ManualToolStripMenuItem
'btManual
'
Me.ManualToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
Me.ManualToolStripMenuItem.Name = "ManualToolStripMenuItem"
Me.ManualToolStripMenuItem.Size = New System.Drawing.Size(59, 20)
Me.ManualToolStripMenuItem.Text = "Manual"
Me.btManual.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
Me.btManual.Image = CType(resources.GetObject("btManual.Image"), System.Drawing.Image)
Me.btManual.Name = "btManual"
Me.btManual.Size = New System.Drawing.Size(69, 20)
Me.btManual.Text = "설명서"
'
'TreeView1
'
@@ -829,5 +830,5 @@ Partial Class MdiMain
Friend WithEvents BatchUpdateProfileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btcustomprofile As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btMacro2 As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents ManualToolStripMenuItem As ToolStripMenuItem
Friend WithEvents btManual As ToolStripMenuItem
End Class

View File

@@ -248,6 +248,27 @@
b6AQ75sCVnsVfDHIceuzCVkfYyw4KQ2Mqa8QnWkVq15THp6eXNzdMla0d1nuyiIoVKNTHJMGrFWX2Jhu
IjLRwPp4HeGRGrEaFNQEhh/it1TSde9IOmC327HZbAyVX+Bd6TnxUKYHZ+hVnsKQfwL9/eNoc4/SKT9M
h+wQKpVKnLQN/mV+AQV66PCS6TFTAAAAAElFTkSuQmCC
</value>
</data>
<data name="btManual.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANbSURBVDhPZZPdT1MHHIZ7sd3N7HL7Lxq7uUUzZjYS
nC7olATkcxwXyiD0RMKGWAMBJGpEJhhl0sKGIIWC7FDoh2C/gAO1UqCFQqHUwpA5YGMYN9wyzJ6lZFvQ
Xbx3v+f53byvAlDsjigLcaIsdIqysCjKwm+iLPwhysKaKAu9mqHsj16+3w2+IsrC7Rhw7/s2fOsDOJdG
MIdH6Ak5uBMykOfM3FYPpFlPWVNee0EgysKroizILXNXWN0aJ7wRZHpjAmlxEkt0lpZgkFv+CTr9MnXe
i2RKSYHUzmOv7xa0NYcuEn3qZvaph5nNGSbX/BgWZuiKRqgdX6D6foivBr1IMw7qPFqSWo9YdwSiLLwn
ysKfy7+6MW9auPPEgm1jENujII1z89yYDqOxjKPp81A1ZkG3eJ3xHyUS9QnPD9d/eCwm6LZEb+L7yUL7
pgnjL1686wFqJmeoHptHbR4n126ncFZHUbSSwoiWVn8dt+9fIv5qXH9MsDz1cx8ty3pq1puwbQTxrPsR
+ydRm3x86R0jd6GYxHk1iaEcMqcLKLtXxNBCG+9f2v84JtiKPHFyfq4CzcIZdD+4aF/0kdnxgALHENXh
u2TPGTgYOEOCP59P7KkUdH3GxEov+yv3PVNohrOfPdx0UhoooiBQyzdLdrLaPWT1TJPUMIpoH0UbkNDI
Zj41SqQYz5HbmsbEIxP7yvb+rsh3Za1MrvVQGzzP5YiLyrFhklt8ZEhh0qUIH+u8xF9wEV9l44Sun1Nt
9RQbcnDMtaDSKlcV6oG0Xil0DXO0mdOjVZT7O8hoGyGl3U9y5xLHDWGO3PRw6Eo/KXorOd9WUOs6S6Oz
IiZwKQRzckKmlLQ9vW7hC3sehQ4RjdVJequX9K5FTnY85Oi1QU4am1CbSsitT8MdMcTgv1RaZdpOkVI6
jppq3MX0hRood5+lbMhOvnGUPFOInO5ZsvR28ruz+fzrVBoGKzhnzN35/l8TT9w6vCdRnxC4YDuNZ/U7
mqfcVPSNUGp+QInko6S9nxu+cuzhZrQd6hgcVmmVb74wpkPXP9gTfzXOevDyge2mET1NQ300DjpoGnZi
mupB5y6Lgc9jn1Va5Rv/W+O/OVD1zvF3y9+yvV26d0WlVW79k8cqrdKh0iozXr7/G9y9vOYtj3fFAAAA
AElFTkSuQmCC
</value>
</data>
<metadata name="ContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -330,73 +351,73 @@
<data name="ToolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
2FiAVmb3aQAAAABJRU5ErkJggg==
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
WG90MeopAAAAAElFTkSuQmCC
</value>
</data>
<data name="ToolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

View File

@@ -86,7 +86,8 @@ Public Class MdiMain
Refresh_info()
'// wwwroot 폴더 확인 및 압축 해제
CheckAndExtractWwwroot()
Read_SEtting() '//환경설정을 가져온다. Splah를 변경했따.
Read_FilHistory() '//파일사용내역
@@ -291,6 +292,35 @@ Public Class MdiMain
End Sub
Private Sub CheckAndExtractWwwroot()
Try
' wwwroot 폴더 경로 확인
Dim wwwrootPath As String = Path.Combine(Application.StartupPath, "wwwroot")
Dim indexHtmlPath As String = Path.Combine(wwwrootPath, "index.html")
Dim zipPath As String = Path.Combine(wwwrootPath, "wwwroot.zip")
' wwwroot 폴더가 없거나 index.html이 없는 경우
If (Not Directory.Exists(wwwrootPath) OrElse Not File.Exists(indexHtmlPath)) Then
' wwwroot.zip 파일이 존재하는지 확인
If File.Exists(zipPath) Then
' 압축 해제 폼 표시
Dim extractForm As New Frm_WwwrootExtract()
extractForm.ShowDialog()
' 압축 해제가 실패한 경우
If extractForm.DialogResult <> DialogResult.OK Then
MessageBox.Show("매뉴얼 파일 압축 해제에 실패했습니다." & vbCrLf & "일부 기능이 제한될 수 있습니다.",
"경고", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
End If
End If
Catch ex As Exception
' 오류가 발생해도 프로그램은 계속 실행
MessageBox.Show("매뉴얼 파일 확인 중 오류가 발생했습니다: " & ex.Message,
"경고", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Try
End Sub
Private Sub bt_fileopen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
@@ -3968,7 +3998,7 @@ ENDSTAT: '//오류발생시 강제종료를 위한 분기문
Dim frmManual As Frm_WebManual = Nothing
Private Sub ManualToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ManualToolStripMenuItem.Click
Private Sub ManualToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles btManual.Click
Try
If frmManual Is Nothing OrElse frmManual.IsDisposed Then
frmManual = New Frm_WebManual()

File diff suppressed because it is too large Load Diff

View File

@@ -1125,6 +1125,12 @@
}
"Entry"
{
"MsmKey" = "8:_EDDA88464F3D4868A4D31EB154F946A3"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EEFCE67CA4744ADF98423F68123415AC"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -1186,25 +1192,7 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_DF16200C7C9B40998C022F2E37D1E143"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4608D921DC658CD173C039AF16C5E283"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_59B3512FD7C9D2430BF7B3C6379B9C9D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_36E293D174759AFAAD42CF70AA63402C"
"OwnerKey" = "8:_F7DF6157CD83D46091E6404B3E2CE830"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1216,25 +1204,13 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_29FE169CCEBDEB4C07246AF3E1D7D1EF"
"OwnerKey" = "8:_DF16200C7C9B40998C022F2E37D1E143"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_F7DF6157CD83D46091E6404B3E2CE830"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_691C9DA50302E0464D0E64E97C1242A2"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4B290A29E53110D5B83008A4DD0873A2"
"OwnerKey" = "8:_BFCB09EF0CA43B0269B207A4DB42D1BF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -1246,7 +1222,37 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_BFCB09EF0CA43B0269B207A4DB42D1BF"
"OwnerKey" = "8:_691C9DA50302E0464D0E64E97C1242A2"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_59B3512FD7C9D2430BF7B3C6379B9C9D"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4B290A29E53110D5B83008A4DD0873A2"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4608D921DC658CD173C039AF16C5E283"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_36E293D174759AFAAD42CF70AA63402C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_29FE169CCEBDEB4C07246AF3E1D7D1EF"
"MsmSig" = "8:_UNDEFINED"
}
}
@@ -1276,11 +1282,6 @@
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0"
{
"Name" = "8:Microsoft .NET Framework 4(x86 및 x64)"
"ProductCode" = "8:.NETFramework,Version=v4.0"
}
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.8"
{
"Name" = "8:Microsoft .NET Framework 4.8(x86 및 x64)"
@@ -5110,6 +5111,26 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EDDA88464F3D4868A4D31EB154F946A3"
{
"SourcePath" = "8:C:\\eco2\\debug_2016\\wwwroot\\wwwroot.zip"
"TargetName" = "8:wwwroot.zip"
"Tag" = "8:"
"Folder" = "8:_0824271A37F9420DBDD958E10624F020"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EEFCE67CA4744ADF98423F68123415AC"
{
"SourcePath" = "8:C:\\eco2\\debug_2016\\WebView2Runtime\\msedge_elf.dll"
@@ -5317,6 +5338,17 @@
"Property" = "8:TARGETDIR"
"Folders"
{
"{9EF0B969-E518-4E46-987F-47570745A589}:_0824271A37F9420DBDD958E10624F020"
{
"Name" = "8:wwwroot"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_B229286B7A1047BBB6C5EF3FC994B34D"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_A02FAE1984434D0C9BCF4CCA745960F5"
{
"Name" = "8:Data"