Compare commits
2 Commits
6cd2abe560
...
1d6c51df3b
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d6c51df3b | |||
| 40842778e0 |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -8,3 +8,11 @@ obj
|
|||||||
/Setup1/Debug
|
/Setup1/Debug
|
||||||
/Dotfuscated
|
/Dotfuscated
|
||||||
UpgradeLog.htm
|
UpgradeLog.htm
|
||||||
|
Packages
|
||||||
|
.vs
|
||||||
|
/NUL
|
||||||
|
|
||||||
|
# WebView2 Runtime (Fixed Version - 약 100-150MB, 설치 프로그램에 포함)
|
||||||
|
WebView2Runtime/
|
||||||
|
# WebView2 User Data (캐시, 쿠키 등 - 런타임 시 자동 생성)
|
||||||
|
WebView2Data/
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
Public Class Frm_WebManual
|
Imports System.IO
|
||||||
|
Imports System.Threading.Tasks
|
||||||
|
Imports Microsoft.Web.WebView2.Core
|
||||||
|
|
||||||
|
Public Class Frm_WebManual
|
||||||
|
|
||||||
Public Sub Navigate(url As String)
|
Public Sub Navigate(url As String)
|
||||||
Try
|
Try
|
||||||
@@ -14,16 +18,48 @@
|
|||||||
|
|
||||||
Private Async Sub Frm_WebManual_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
Private Async Sub Frm_WebManual_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||||
Try
|
Try
|
||||||
' WebView2 초기화
|
' WebView2 초기화 (Runtime이 없으면 자동 다운로드)
|
||||||
Await WebView21.EnsureCoreWebView2Async(Nothing)
|
Await InitializeWebView2Async()
|
||||||
|
|
||||||
' 로컬 웹서버 페이지 로드
|
' 로컬 웹서버 페이지 로드
|
||||||
WebView21.CoreWebView2.Navigate("http://localhost:58123/")
|
If WebView21.CoreWebView2 IsNot Nothing Then
|
||||||
|
WebView21.CoreWebView2.Navigate("http://localhost:58123/")
|
||||||
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MessageBox.Show("웹페이지 로드 중 오류가 발생했습니다: " & ex.Message, _
|
MessageBox.Show("웹페이지 로드 중 오류가 발생했습니다: " & ex.Message,
|
||||||
"오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
"오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Async Function InitializeWebView2Async() As Task
|
||||||
|
Try
|
||||||
|
' Fixed Version 경로 설정
|
||||||
|
Dim fixedVersionPath = Path.Combine(Application.StartupPath, "WebView2Runtime")
|
||||||
|
Dim userDataFolder = Path.Combine(Application.StartupPath, "WebView2Data")
|
||||||
|
|
||||||
|
' Fixed Version이 있는지 확인
|
||||||
|
If Directory.Exists(fixedVersionPath) Then
|
||||||
|
' Fixed Version 사용
|
||||||
|
Dim env = Await CoreWebView2Environment.CreateAsync(fixedVersionPath, userDataFolder)
|
||||||
|
Await WebView21.EnsureCoreWebView2Async(env)
|
||||||
|
Else
|
||||||
|
' 시스템에 설치된 Runtime 사용 (폴백)
|
||||||
|
Await WebView21.EnsureCoreWebView2Async(Nothing)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
' WebView2 Runtime을 찾을 수 없는 경우
|
||||||
|
MessageBox.Show(
|
||||||
|
"WebView2 구성 요소를 찾을 수 없습니다." & vbCrLf & vbCrLf &
|
||||||
|
"프로그램 설치가 올바르지 않을 수 있습니다." & vbCrLf &
|
||||||
|
"관리자에게 문의하시기 바랍니다.",
|
||||||
|
"오류",
|
||||||
|
MessageBoxButtons.OK,
|
||||||
|
MessageBoxIcon.Error)
|
||||||
|
|
||||||
|
Me.Close()
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
@@ -265,6 +265,9 @@ Public Class MdiMain
|
|||||||
Debug.WriteLine("웹 서버 시작 실패: " & ex.Message)
|
Debug.WriteLine("웹 서버 시작 실패: " & ex.Message)
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
|
' WebView2 Fixed Version 체크
|
||||||
|
CheckWebView2Runtime()
|
||||||
|
|
||||||
|
|
||||||
If Me.bt_etc.Visible = False AndAlso System.Diagnostics.Debugger.IsAttached Then
|
If Me.bt_etc.Visible = False AndAlso System.Diagnostics.Debugger.IsAttached Then
|
||||||
MsgBox("debugmode import on")
|
MsgBox("debugmode import on")
|
||||||
@@ -801,14 +804,14 @@ Public Class MdiMain
|
|||||||
If Prj.UIVersion <> CurrentUIVersion() Then
|
If Prj.UIVersion <> CurrentUIVersion() Then
|
||||||
|
|
||||||
If CInt(Prj.UIVersion.Substring(0, 4)) >= 2016 Then
|
If CInt(Prj.UIVersion.Substring(0, 4)) >= 2016 Then
|
||||||
MsgBox("해당 파일은 현재 프로그램과 동일한 버젼에서 생성된 파일이 아닙니다" + vbCrLf + vbCrLf + _
|
MsgBox("해당 파일은 현재 프로그램과 동일한 버젼에서 생성된 파일이 아닙니다" + vbCrLf + vbCrLf +
|
||||||
"파일 Version : " + Prj.UIVersion + vbCrLf + _
|
"파일 Version : " + Prj.UIVersion + vbCrLf +
|
||||||
"현재 Version : " + CurrentUIVersion() + vbCrLf + vbCrLf + _
|
"현재 Version : " + CurrentUIVersion() + vbCrLf + vbCrLf +
|
||||||
"파일을 생성한 버젼과 결과 혹은 화면이 일치하지 않을 수 있습니다", MsgBoxStyle.Information, "버전확인")
|
"파일을 생성한 버젼과 결과 혹은 화면이 일치하지 않을 수 있습니다", MsgBoxStyle.Information, "버전확인")
|
||||||
Else
|
Else
|
||||||
MsgBox("해당 파일은 현재 프로그램과 동일한 버젼에서 생성된 파일이 아닙니다" + vbCrLf + vbCrLf + _
|
MsgBox("해당 파일은 현재 프로그램과 동일한 버젼에서 생성된 파일이 아닙니다" + vbCrLf + vbCrLf +
|
||||||
"파일 Version : " + vbCrLf + _
|
"파일 Version : " + vbCrLf +
|
||||||
"현재 Version : " + CurrentUIVersion() + vbCrLf + vbCrLf + _
|
"현재 Version : " + CurrentUIVersion() + vbCrLf + vbCrLf +
|
||||||
"파일을 생성한 버젼과 결과 혹은 화면이 일치하지 않을 수 있습니다", MsgBoxStyle.Information, "버전확인")
|
"파일을 생성한 버젼과 결과 혹은 화면이 일치하지 않을 수 있습니다", MsgBoxStyle.Information, "버전확인")
|
||||||
|
|
||||||
End If
|
End If
|
||||||
@@ -999,7 +1002,7 @@ Public Class MdiMain
|
|||||||
Dim oldfi As New System.IO.FileInfo(FileName)
|
Dim oldfi As New System.IO.FileInfo(FileName)
|
||||||
Dim newfi As New System.IO.FileInfo(bakdi.FullName + "\open_" + oldfi.Name)
|
Dim newfi As New System.IO.FileInfo(bakdi.FullName + "\open_" + oldfi.Name)
|
||||||
If newfi.Exists Then
|
If newfi.Exists Then
|
||||||
If MsgBox("백업된 파일이 존재합니다." + vbCrLf + vbCrLf + _
|
If MsgBox("백업된 파일이 존재합니다." + vbCrLf + vbCrLf +
|
||||||
"백업일자 : " + newfi.CreationTime.ToShortDateString + " " + newfi.CreationTime.ToShortTimeString + vbCrLf + "백업된 파일을 불러오시겠습니까?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "확인") = MsgBoxResult.Yes Then
|
"백업일자 : " + newfi.CreationTime.ToShortDateString + " " + newfi.CreationTime.ToShortTimeString + vbCrLf + "백업된 파일을 불러오시겠습니까?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "확인") = MsgBoxResult.Yes Then
|
||||||
Open_File(newfi.FullName)
|
Open_File(newfi.FullName)
|
||||||
End If
|
End If
|
||||||
@@ -1096,7 +1099,7 @@ Public Class MdiMain
|
|||||||
DSET1.tbl_zone.Rows(i - 1)("순실체적") = CSng(면적) * CSng(천장고)
|
DSET1.tbl_zone.Rows(i - 1)("순실체적") = CSng(면적) * CSng(천장고)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
If DSET1.tbl_zone.Rows(i - 1).RowState = DataRowState.Deleted OrElse _
|
If DSET1.tbl_zone.Rows(i - 1).RowState = DataRowState.Deleted OrElse
|
||||||
DSET1.tbl_zone.Rows(i - 1).RowState = DataRowState.Detached Then
|
DSET1.tbl_zone.Rows(i - 1).RowState = DataRowState.Detached Then
|
||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
@@ -1110,7 +1113,7 @@ Public Class MdiMain
|
|||||||
|
|
||||||
If Not DSET2 Is Nothing Then
|
If Not DSET2 Is Nothing Then
|
||||||
For i As Integer = 1 To DSET2.tbl_zone.Rows.Count
|
For i As Integer = 1 To DSET2.tbl_zone.Rows.Count
|
||||||
If DSET2.tbl_zone.Rows(i - 1).RowState = DataRowState.Deleted OrElse _
|
If DSET2.tbl_zone.Rows(i - 1).RowState = DataRowState.Deleted OrElse
|
||||||
DSET2.tbl_zone.Rows(i - 1).RowState = DataRowState.Detached Then
|
DSET2.tbl_zone.Rows(i - 1).RowState = DataRowState.Detached Then
|
||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
@@ -1125,7 +1128,7 @@ Public Class MdiMain
|
|||||||
'//입력면
|
'//입력면
|
||||||
If Not DSET1 Is Nothing Then
|
If Not DSET1 Is Nothing Then
|
||||||
For i As Integer = 1 To DSET1.tbl_myoun.Rows.Count
|
For i As Integer = 1 To DSET1.tbl_myoun.Rows.Count
|
||||||
If DSET1.tbl_myoun.Rows(i - 1).RowState = DataRowState.Deleted OrElse _
|
If DSET1.tbl_myoun.Rows(i - 1).RowState = DataRowState.Deleted OrElse
|
||||||
DSET1.tbl_myoun.Rows(i - 1).RowState = DataRowState.Detached Then
|
DSET1.tbl_myoun.Rows(i - 1).RowState = DataRowState.Detached Then
|
||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
@@ -1144,7 +1147,7 @@ Public Class MdiMain
|
|||||||
|
|
||||||
If Not DSET2 Is Nothing Then
|
If Not DSET2 Is Nothing Then
|
||||||
For i As Integer = 1 To DSET2.tbl_myoun.Rows.Count
|
For i As Integer = 1 To DSET2.tbl_myoun.Rows.Count
|
||||||
If DSET2.tbl_myoun.Rows(i - 1).RowState = DataRowState.Deleted OrElse _
|
If DSET2.tbl_myoun.Rows(i - 1).RowState = DataRowState.Deleted OrElse
|
||||||
DSET2.tbl_myoun.Rows(i - 1).RowState = DataRowState.Detached Then
|
DSET2.tbl_myoun.Rows(i - 1).RowState = DataRowState.Detached Then
|
||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
@@ -2032,8 +2035,8 @@ Public Class MdiMain
|
|||||||
'MsgBox(autoselecttagname)
|
'MsgBox(autoselecttagname)
|
||||||
|
|
||||||
'//추가할메뉴선택
|
'//추가할메뉴선택
|
||||||
Dim Menus() As String = New String() {"입력존", "공조처리", _
|
Dim Menus() As String = New String() {"입력존", "공조처리",
|
||||||
"난방기기", "난방공급시스템", "난방분배시스템", "냉방기기", _
|
"난방기기", "난방공급시스템", "난방분배시스템", "냉방기기",
|
||||||
"냉방분배시스템", "신재생및열병합", "열관류율", "월별에너지사용량"}
|
"냉방분배시스템", "신재생및열병합", "열관류율", "월별에너지사용량"}
|
||||||
For Each m As String In Menus
|
For Each m As String In Menus
|
||||||
|
|
||||||
@@ -2707,8 +2710,8 @@ ENDSTAT: '//오류발생시 강제종료를 위한 분기문
|
|||||||
|
|
||||||
Private Sub ToolStripMenuItem13_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripMenuItem13.Click
|
Private Sub ToolStripMenuItem13_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripMenuItem13.Click
|
||||||
|
|
||||||
If MsgBox("정말로 서버의 데이터를 수정하시겠습니까?" & vbCrLf & _
|
If MsgBox("정말로 서버의 데이터를 수정하시겠습니까?" & vbCrLf &
|
||||||
"서버의 기상데이터가 삭제되고 현재데이터가 씌여집니다." & vbCrLf & _
|
"서버의 기상데이터가 삭제되고 현재데이터가 씌여집니다." & vbCrLf &
|
||||||
"이작업은 되돌릴 수없습니다", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "확인") <> MsgBoxResult.Ok Then Return
|
"이작업은 되돌릴 수없습니다", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "확인") <> MsgBoxResult.Ok Then Return
|
||||||
|
|
||||||
Dim pass As String = InputBox("암호입력")
|
Dim pass As String = InputBox("암호입력")
|
||||||
@@ -2742,11 +2745,11 @@ ENDSTAT: '//오류발생시 강제종료를 위한 분기문
|
|||||||
Rcnt += Ta2.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.최대부하, Dr.m01, Dr.m02, Dr.m03, Dr.m04, Dr.m05, Dr.m06, Dr.m07, Dr.m08, Dr.m09, Dr.m10, Dr.m11, Dr.m12)
|
Rcnt += Ta2.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.최대부하, Dr.m01, Dr.m02, Dr.m03, Dr.m04, Dr.m05, Dr.m06, Dr.m07, Dr.m08, Dr.m09, Dr.m10, Dr.m11, Dr.m12)
|
||||||
Next
|
Next
|
||||||
For Each Dr As DS.weather_supdoRow In DSET1.weather_supdo.Rows
|
For Each Dr As DS.weather_supdoRow In DSET1.weather_supdo.Rows
|
||||||
Rcnt += Ta3.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.t01, Dr.t02, Dr.t03, Dr.t04, Dr.t05, Dr.t06, Dr.t07, Dr.t08, Dr.t09, Dr.t10, _
|
Rcnt += Ta3.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.t01, Dr.t02, Dr.t03, Dr.t04, Dr.t05, Dr.t06, Dr.t07, Dr.t08, Dr.t09, Dr.t10,
|
||||||
Dr.t11, Dr.t12, Dr.t13, Dr.t14, Dr.t15, Dr.t16, Dr.t17, Dr.t18, Dr.t19, Dr.t20, Dr.t21, Dr.t22, Dr.t23, Dr.t24)
|
Dr.t11, Dr.t12, Dr.t13, Dr.t14, Dr.t15, Dr.t16, Dr.t17, Dr.t18, Dr.t19, Dr.t20, Dr.t21, Dr.t22, Dr.t23, Dr.t24)
|
||||||
Next
|
Next
|
||||||
For Each Dr As DS.weather_tempRow In DSET1.weather_temp.Rows
|
For Each Dr As DS.weather_tempRow In DSET1.weather_temp.Rows
|
||||||
Rcnt += Ta4.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.t01, Dr.t02, Dr.t03, Dr.t04, Dr.t05, Dr.t06, Dr.t07, Dr.t08, Dr.t09, Dr.t10, _
|
Rcnt += Ta4.Insert(Dr.pcode, Dr.code, Dr.설명, Dr.t01, Dr.t02, Dr.t03, Dr.t04, Dr.t05, Dr.t06, Dr.t07, Dr.t08, Dr.t09, Dr.t10,
|
||||||
Dr.t11, Dr.t12, Dr.t13, Dr.t14, Dr.t15, Dr.t16, Dr.t17, Dr.t18, Dr.t19, Dr.t20, Dr.t21, Dr.t22, Dr.t23, Dr.t24)
|
Dr.t11, Dr.t12, Dr.t13, Dr.t14, Dr.t15, Dr.t16, Dr.t17, Dr.t18, Dr.t19, Dr.t20, Dr.t21, Dr.t22, Dr.t23, Dr.t24)
|
||||||
Next
|
Next
|
||||||
MsgBox("업데이트완료", MsgBoxStyle.Information, "확인")
|
MsgBox("업데이트완료", MsgBoxStyle.Information, "확인")
|
||||||
@@ -3899,8 +3902,8 @@ ENDSTAT: '//오류발생시 강제종료를 위한 분기문
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
content.Append(vbTab + drm.설명 + vbTab + drm.건축부위방식 + vbTab + _
|
content.Append(vbTab + drm.설명 + vbTab + drm.건축부위방식 + vbTab +
|
||||||
drm.건축부위면적 + vbTab + _
|
drm.건축부위면적 + vbTab +
|
||||||
열관류율 + vbTab + drm.방위)
|
열관류율 + vbTab + drm.방위)
|
||||||
Next
|
Next
|
||||||
content.AppendLine()
|
content.AppendLine()
|
||||||
@@ -3993,9 +3996,26 @@ ENDSTAT: '//오류발생시 강제종료를 위한 분기문
|
|||||||
frmManual.Show()
|
frmManual.Show()
|
||||||
End If
|
End If
|
||||||
If frmManual.WindowState = FormWindowState.Minimized Then
|
If frmManual.WindowState = FormWindowState.Minimized Then
|
||||||
frmManual.WindowState = FormWindowState.Normal
|
frmManual.WindowState = FormWindowState.Normal
|
||||||
End If
|
End If
|
||||||
frmManual.Activate()
|
frmManual.Activate()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' WebView2 Fixed Version 런타임 체크
|
||||||
|
''' </summary>
|
||||||
|
Private Sub CheckWebView2Runtime()
|
||||||
|
Try
|
||||||
|
Dim fixedVersionPath = Path.Combine(Application.StartupPath, "WebView2Runtime")
|
||||||
|
|
||||||
|
' Fixed Version 폴더가 없으면 경고 (하지만 계속 실행)
|
||||||
|
If Not Directory.Exists(fixedVersionPath) Then
|
||||||
|
Debug.WriteLine("경고: WebView2 Fixed Version을 찾을 수 없습니다. Manual 기능이 제한될 수 있습니다.")
|
||||||
|
' 사용자에게는 Manual 메뉴를 클릭할 때만 알림
|
||||||
|
End If
|
||||||
|
|
||||||
|
Catch ex As Exception
|
||||||
|
Debug.WriteLine("WebView2 체크 중 오류: " & ex.Message)
|
||||||
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
4485
Setup1/Setup1.vdproj
4485
Setup1/Setup1.vdproj
File diff suppressed because it is too large
Load Diff
135
claudedocs/WebView2_Deployment_Guide.md
Normal file
135
claudedocs/WebView2_Deployment_Guide.md
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
# WebView2 Fixed Version 배포 가이드
|
||||||
|
|
||||||
|
## 개요
|
||||||
|
|
||||||
|
ECO2 프로그램은 WebView2 Fixed Version 방식을 사용하여 오프라인 환경에서도 매뉴얼 뷰어를 사용할 수 있습니다.
|
||||||
|
|
||||||
|
## Fixed Version 다운로드
|
||||||
|
|
||||||
|
### 1. 다운로드 위치
|
||||||
|
https://developer.microsoft.com/microsoft-edge/webview2/#download-section
|
||||||
|
|
||||||
|
"Fixed Version" 섹션에서 다운로드합니다.
|
||||||
|
|
||||||
|
### 2. 버전 선택
|
||||||
|
- **플랫폼**: x86 (32-bit) - ECO2는 x86 타겟입니다
|
||||||
|
- **추천 버전**: 최신 Stable 버전
|
||||||
|
- 파일 크기: 약 100-150MB
|
||||||
|
|
||||||
|
### 3. 다운로드 파일 예시
|
||||||
|
- `Microsoft.WebView2.FixedVersionRuntime.{version}.x86.cab`
|
||||||
|
- 또는 압축 해제된 폴더 형태
|
||||||
|
|
||||||
|
## 배포 방법
|
||||||
|
|
||||||
|
### 1. 폴더 구조
|
||||||
|
```
|
||||||
|
{프로그램 설치 폴더}/
|
||||||
|
├── ECO2_2025V1.exe
|
||||||
|
├── WebView2Runtime/ ← Fixed Version 런타임 폴더
|
||||||
|
│ ├── msedge.exe
|
||||||
|
│ ├── msedgewebview2.exe
|
||||||
|
│ └── [기타 WebView2 파일들]
|
||||||
|
└── WebView2Data/ ← 사용자 데이터 폴더 (자동 생성됨)
|
||||||
|
└── [캐시, 쿠키 등]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 설치 단계
|
||||||
|
|
||||||
|
#### 방법 1: 수동 배포 (개발/테스트)
|
||||||
|
1. Fixed Version CAB 파일 또는 폴더 다운로드
|
||||||
|
2. CAB 파일인 경우 압축 해제
|
||||||
|
3. 압축 해제된 내용을 `WebView2Runtime` 폴더로 복사
|
||||||
|
4. `WebView2Runtime` 폴더를 프로그램 실행 파일과 같은 위치에 배치
|
||||||
|
|
||||||
|
#### 방법 2: 설치 프로그램 포함 (프로덕션)
|
||||||
|
Setup1 프로젝트에 WebView2Runtime 폴더를 포함:
|
||||||
|
1. Setup1.vdproj 열기
|
||||||
|
2. WebView2Runtime 폴더를 프로젝트에 추가
|
||||||
|
3. 설치 시 Application Folder에 복사되도록 설정
|
||||||
|
|
||||||
|
## 동작 방식
|
||||||
|
|
||||||
|
### 런타임 검색 순서
|
||||||
|
1. **Fixed Version 우선**: `{실행폴더}\WebView2Runtime` 폴더 검색
|
||||||
|
2. **시스템 런타임 폴백**: 시스템에 설치된 WebView2 Runtime 사용
|
||||||
|
3. **없을 경우**: 매뉴얼 기능 사용 시 오류 메시지 표시
|
||||||
|
|
||||||
|
### 프로그램 시작 시 검사
|
||||||
|
- MdiMain 로드 시 `CheckWebView2Runtime()` 메서드가 Fixed Version 존재 여부 확인
|
||||||
|
- Debug.WriteLine으로 경고 출력 (사용자에게는 미표시)
|
||||||
|
- 실제 사용 시점(매뉴얼 열기)에만 오류 표시
|
||||||
|
|
||||||
|
### 오프라인 환경
|
||||||
|
- Fixed Version이 배포되어 있으면 인터넷 연결 불필요
|
||||||
|
- 모든 런타임 파일이 로컬에 포함되어 있음
|
||||||
|
- 폐쇄망 환경에서도 정상 작동
|
||||||
|
|
||||||
|
## 버전 업데이트
|
||||||
|
|
||||||
|
### Fixed Version 업데이트 방법
|
||||||
|
1. 새 Fixed Version 다운로드
|
||||||
|
2. 기존 `WebView2Runtime` 폴더 백업 (선택사항)
|
||||||
|
3. 새 버전으로 `WebView2Runtime` 폴더 교체
|
||||||
|
4. 프로그램 재시작
|
||||||
|
|
||||||
|
### 주의사항
|
||||||
|
- WebView2Runtime 폴더는 약 100-150MB이므로 Git에 커밋하지 않음
|
||||||
|
- .gitignore에 이미 추가되어 있음
|
||||||
|
- 설치 프로그램에는 반드시 포함해야 함
|
||||||
|
|
||||||
|
## 테스트 방법
|
||||||
|
|
||||||
|
### 1. Fixed Version 테스트
|
||||||
|
```
|
||||||
|
1. WebView2Runtime 폴더가 있는 상태에서 프로그램 실행
|
||||||
|
2. "Manual" 메뉴 클릭
|
||||||
|
3. http://localhost:58123/ 페이지가 정상적으로 로드되는지 확인
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 폴백(Fallback) 테스트
|
||||||
|
```
|
||||||
|
1. WebView2Runtime 폴더 임시 이름 변경 (예: WebView2Runtime_backup)
|
||||||
|
2. 프로그램 실행 (시스템 런타임 사용 시도)
|
||||||
|
3. "Manual" 메뉴 클릭
|
||||||
|
4. 시스템에 런타임이 있으면 정상 작동, 없으면 오류 메시지
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 오프라인 테스트
|
||||||
|
```
|
||||||
|
1. 네트워크 연결 끊기
|
||||||
|
2. Fixed Version 배포된 상태에서 프로그램 실행
|
||||||
|
3. 매뉴얼 기능이 정상 작동하는지 확인
|
||||||
|
```
|
||||||
|
|
||||||
|
## 문제 해결
|
||||||
|
|
||||||
|
### "WebView2 구성 요소를 찾을 수 없습니다" 오류
|
||||||
|
**원인**: Fixed Version도 없고 시스템 런타임도 설치되지 않음
|
||||||
|
|
||||||
|
**해결**:
|
||||||
|
1. WebView2Runtime 폴더가 실행 파일과 같은 위치에 있는지 확인
|
||||||
|
2. WebView2Runtime 폴더 내에 msedgewebview2.exe 파일이 있는지 확인
|
||||||
|
3. 또는 시스템에 WebView2 Runtime 설치: https://go.microsoft.com/fwlink/p/?LinkId=2124703
|
||||||
|
|
||||||
|
### 페이지 로딩 실패
|
||||||
|
**원인**: 로컬 웹서버(http://localhost:58123/)가 실행되지 않음
|
||||||
|
|
||||||
|
**해결**:
|
||||||
|
1. 로컬 웹서버가 실행 중인지 확인
|
||||||
|
2. 포트 58123이 열려 있는지 확인
|
||||||
|
3. Frm_WebManual.vb의 Navigate URL 수정 필요 시 수정
|
||||||
|
|
||||||
|
### WebView2Data 폴더 문제
|
||||||
|
**원인**: 캐시 또는 쿠키 문제
|
||||||
|
|
||||||
|
**해결**:
|
||||||
|
1. 프로그램 종료
|
||||||
|
2. WebView2Data 폴더 삭제
|
||||||
|
3. 프로그램 재시작 (자동으로 새 폴더 생성됨)
|
||||||
|
|
||||||
|
## 참고 자료
|
||||||
|
|
||||||
|
- WebView2 공식 문서: https://learn.microsoft.com/microsoft-edge/webview2/
|
||||||
|
- Fixed Version 배포 가이드: https://learn.microsoft.com/microsoft-edge/webview2/concepts/distribution
|
||||||
|
- WebView2 다운로드: https://developer.microsoft.com/microsoft-edge/webview2/
|
||||||
1
run_claude.bat
Normal file
1
run_claude.bat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
claude --dangerously-skip-permissions
|
||||||
Reference in New Issue
Block a user