WebView2 Fixed Version 호환성 문제 해결 - NuGet 패키지 버전 업데이트 및 환경 설정 개선

This commit is contained in:
2025-08-11 14:42:57 +09:00
parent 5949e3e7a1
commit a13306115b
54 changed files with 1312 additions and 18083 deletions

View File

@@ -0,0 +1,19 @@
{
"hooks": {
"conversation-start": "새로운 대화를 시작할 때 항상 CLAUDE.md 파일을 자동으로 읽고 프로젝트 컨텍스트를 파악하세요",
"user-prompt-submit": "작업을 시작하기 전에 항상 CLAUDE.md 파일을 읽고 참조하세요"
},
"rules": [
"대화 시작 시 반드시 CLAUDE.md 파일을 읽어서 프로젝트 컨텍스트를 파악할 것",
"모든 답변은 한국어로 작성할 것",
"UniMarc 프로젝트는 C# WinForms 기반의 도서관 관리 시스템임"
],
"context_files": [
"CLAUDE.md"
],
"project_info": {
"name": "UniMarc",
"type": "도서관 자료 관리 시스템",
"tech_stack": "C# WinForms, .NET Framework 4.7.2, MySQL"
}
}

View File

@@ -0,0 +1,6 @@
{
"hooks": {
"conversation-start": "새로운 대화를 시작할 때 항상 CLAUDE.md 파일을 자동으로 읽고 프로젝트 컨텍스트를 파악하세요",
"user-prompt-submit": "작업을 시작하기 전에 항상 CLAUDE.md 파일을 읽고 참조하세요"
}
}

9
unimarc/.cursorignore Normal file
View File

@@ -0,0 +1,9 @@
# 이 파일들은 항상 컨텍스트에 포함
!CLAUDE.md
!.claude/settings.local.json
# 제외할 파일들
bin/
obj/
*.dll
*.pdb

1
unimarc/.cursorrules Normal file
View File

@@ -0,0 +1 @@
CLAUDE.md 파일을 참조하여 답변하세요

48
unimarc/CLAUDE.md Normal file
View File

@@ -0,0 +1,48 @@
# ⚠️ 중요: 대화 시작시 이 파일을 반드시 읽으세요!
# 답변은 가급적이면 한글로!
# UniMarc 프로젝트 - Claude 작업 가이드
> **Claude에게**: 대화를 시작할 때마다 이 파일을 먼저 읽어서 프로젝트 컨텍스트를 파악하세요.
## 프로젝트 개요
- **프로젝트명**: UniMarc (도서관 자료 관리 시스템)
- **기술스택**: C# WinForms, .NET Framework 4.7.2
- **데이터베이스**: MySQL
- **주요기능**: 마크 작성, 복본조사, DLS 연동, 도서 정보 관리
## 코딩 컨벤션
- 파일명: PascalCase (예: DLS_Copy.cs)
- 클래스명: PascalCase
- 메서드명: PascalCase
- 변수명: camelCase
- 상수명: UPPER_CASE
## 주요 디렉토리 구조
- `/마크/`: 마크 관련 폼들
- `/납품관리/`: 납품 관리 관련 폼들
- `/마스터/`: 마스터 데이터 관리 폼들
- `/홈/`: 메인 화면 관련 폼들
- `/회계/`: 회계 관련 폼들
## 개발 시 주의사항
1. WebView2 사용 시 async/await 패턴 적용
2. 데이터베이스 연결은 Helper_DB 클래스 사용
3. 에러 처리는 try-catch 블록으로 처리
4. 한글 주석 사용
## 빌드 및 배포
- Visual Studio 2019 이상 필요
- NuGet 패키지 복원 후 빌드
- WebView2 런타임 필요
- NetFX 프로젝트이므로 dotnet 명령은 사용 불가
## MsBuild 실행파일 위치 (경로에 공백이 있으니 쌍따옴표로 감싸야 함)
## 매개변수 입력할때 platform 은 제거하고 그냥 프로젝트명만 입력
F:\(VHD) Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\msbuild.exe
## 프로젝트 파일명
UniMarc.csproj
## Webview2 Fixed Version 다운로드 주소
https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/759b508a-00bb-4724-9b87-2703c8417737/Microsoft.WebView2.FixedVersionRuntime.139.0.3405.86.x86.cab

51
unimarc/README.md Normal file
View File

@@ -0,0 +1,51 @@
# UniMarc - 도서관 자료 관리 시스템
## 📋 프로젝트 개요
- **프로젝트명**: UniMarc
- **목적**: 도서관 자료 관리 시스템
- **기술스택**: C# WinForms, .NET Framework 4.7.2
- **데이터베이스**: MySQL
- **주요기능**: 마크 작성, 복본조사, DLS 연동, 도서 정보 관리
## 🛠️ 개발 환경
- Visual Studio 2019 이상
- .NET Framework 4.7.2
- WebView2 Runtime
- MySQL 데이터베이스
## 📁 디렉토리 구조
```
unimarc/
├── 마크/ # 마크 관련 폼들
├── 납품관리/ # 납품 관리 관련 폼들
├── 마스터/ # 마스터 데이터 관리 폼들
├── 홈/ # 메인 화면 관련 폼들
├── 회계/ # 회계 관련 폼들
├── 편의기능/ # 편의 기능들
└── 작업일지/ # 작업 일지 관련
```
## 🔧 빌드 방법
```cmd
# MSBuild 사용
"F:\(VHD) Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\MSBuild.exe" UniMarc.csproj
```
## ⚠️ 중요 주의사항
1. **MSBuild 경로**: 공백이 포함되어 있어 쌍따옴표 필수
2. **WebView2**: async/await 패턴 적용 필요
3. **데이터베이스**: Helper_DB 클래스 사용
4. **에러 처리**: try-catch 블록 필수
5. **한글 주석** 사용
## 📝 코딩 컨벤션
- 파일명: PascalCase
- 클래스명: PascalCase
- 메서드명: PascalCase
- 변수명: camelCase
- 상수명: UPPER_CASE
## 🔄 최근 주요 변경사항
- DLS_Copy.cs: webBrowser1 → WebView2로 교체
- NuGet.Config: HTTPS 소스로 변경
- System.Runtime.CompilerServices.Unsafe 버전 충돌 해결

View File

@@ -9,6 +9,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Factory_Client", "Factory_C
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "UniMarcSetup", "UniMarcSetup\UniMarcSetup.vdproj", "{B0A88F76-DC68-44F9-90B4-CD94625CC1F4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "솔루션 항목", "솔루션 항목", "{2A3A057F-5D22-31FD-628C-DF5EF75AEF1E}"
ProjectSection(SolutionItems) = preProject
CLAUDE.md = CLAUDE.md
.claude\settings.local.json = .claude\settings.local.json
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU

View File

@@ -0,0 +1,10 @@
{
"permissions": {
"allow": [
"Bash(\"F:\\(VHD) Program Files\\Microsoft Visual Studio\\2022\\MSBuild\\Current\\Bin\\msbuild.exe\" \"UniMarc.csproj\")",
"Bash(\"F:\\(VHD) Program Files\\Microsoft Visual Studio\\2022\\MSBuild\\Current\\Bin\\msbuild.exe\" \"UniMarc.csproj\")",
"Bash(\"F:\\(VHD) Program Files\\Microsoft Visual Studio\\2022\\MSBuild\\Current\\Bin\\msbuild.exe\" \"UniMarc.csproj\")"
],
"deny": []
}
}

23
unimarc/unimarc/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,23 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "UniMarc Debug (.NET Framework)",
"type": "clr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/UniMarc.exe",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false,
"enableStepFiltering": false
},
{
"name": "UniMarc Attach (.NET Framework)",
"type": "clr",
"request": "attach",
"processName": "UniMarc.exe"
}
]
}

3
unimarc/unimarc/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"dotnet.preferCSharpExtension": true
}

50
unimarc/unimarc/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,50 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "\"F:\\(VHD) Program Files\\Microsoft Visual Studio\\2022\\MSBuild\\Current\\Bin\\msbuild.exe\"",
"type": "process",
"args": [
"UniMarc.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"group": "build",
"presentation": {
"reveal": "always"
},
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "msbuild",
"type": "process",
"args": [
"UniMarc.csproj",
"/p:Configuration=Release",
"/p:PublishProfile=FolderProfile"
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "msbuild",
"type": "process",
"args": [
"UniMarc.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}

View File

@@ -37,12 +37,12 @@ namespace WindowsFormsApp1
public string DB_User_Data;
public string User;
public string com_idx;
public Main()
{
InitializeComponent();
}
public string User_Name { get; internal set; }
@@ -53,7 +53,7 @@ namespace WindowsFormsApp1
this.Visible = false; // 메인폼을 먼저 숨김
#region "Log setting"
var logsubdir = "{yyyy|MM|dd}";
string tPath = string.Format("{0}\\LOG", AppDomain.CurrentDomain.BaseDirectory).Replace("\\\\", "\\"); ;
@@ -64,10 +64,12 @@ namespace WindowsFormsApp1
login login = new login();
VersionText.Text = string.Format("UniMarc Ver.{0}", ip.VersionInfo());
if (DialogResult.OK == login.ShowDialog(this)) {
if (DialogResult.OK == login.ShowDialog(this))
{
this.Visible = true;
}
else {
else
{
this.Close();
}
@@ -146,7 +148,7 @@ namespace WindowsFormsApp1
#region
public void SetBtnName()
{
string Area =
string Area =
"`ShortCut1`, `ShortCut2`, `ShortCut3`, `ShortCut4`, `ShortCut5`, " +
"`ShortCut6`, `ShortCut7`, `ShortCut8`, `ShortCut9`, `ShortCut10`, " +
"`ShortCut11`, `ShortCut12`";
@@ -241,7 +243,7 @@ namespace WindowsFormsApp1
"송금내역조회", "송금등록", "매입 집계", "매입 장부", "매출 입력",
"매출 입금", "매출 조회", "매출 집계", "파트타임 관리" };
ToolStripMenuItem[] AccT = {
, , , , ,
, , , , ,
, , ,
};
ToolStripMenuItem[] TempAcc = {
@@ -285,15 +287,17 @@ namespace WindowsFormsApp1
for (int a = 0; a < MenuTotal.Length; a++)
{
bool IsText = false;
for(int b = 0; b < MenuTotal[a].Length; b++)
for (int b = 0; b < MenuTotal[a].Length; b++)
{
if (MenuTotal[a][b] == btnText) {
if (MenuTotal[a][b] == btnText)
{
IsText = true;
count[1] = b;
break;
}
}
if (IsText) {
if (IsText)
{
count[0] = a;
break;
}
@@ -305,7 +309,8 @@ namespace WindowsFormsApp1
return;
// 권한설정으로 인한 리턴
if (!MenuCheckT[count[0]][count[1]].Enabled) {
if (!MenuCheckT[count[0]][count[1]].Enabled)
{
MessageBox.Show("권한이 설정되지 않았습니다!");
return;
}
@@ -725,7 +730,7 @@ namespace WindowsFormsApp1
Acc_purchase_Aggregation.Show();
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Acc_purchase_Not_Pay != null)
@@ -741,7 +746,7 @@ namespace WindowsFormsApp1
Acc_purchase_Not_Pay.Show();
}
}
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (Acc_sales_Input != null)
@@ -983,11 +988,11 @@ namespace WindowsFormsApp1
//}
//else
//{
Mac_check_Copy = new Check_copy(this);
Mac_check_Copy.MdiParent = this;
Mac_check_Copy.WindowState = FormWindowState.Normal;
Mac_check_Copy.FormClosed += (o, ea) => Mac_check_Copy = null;
Mac_check_Copy.Show();
Mac_check_Copy = new Check_copy(this);
Mac_check_Copy.MdiParent = this;
Mac_check_Copy.WindowState = FormWindowState.Normal;
Mac_check_Copy.FormClosed += (o, ea) => Mac_check_Copy = null;
Mac_check_Copy.Show();
//}
//foreach (Form frm in Application.OpenForms)
@@ -1192,7 +1197,7 @@ namespace WindowsFormsApp1
DLS_school_Lookup.Show();
}
}
private void dLS복본조사ToolStripMenuItem_Click(object sender, EventArgs e)
async private void dLS복본조사ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Mac_dLS_Copy != null)
{
@@ -1200,6 +1205,8 @@ namespace WindowsFormsApp1
}
else
{
var environment = await WebView2Installer.GetWebView2EnvironmentAsync();
Mac_dLS_Copy = new DLS_Copy(this);
Mac_dLS_Copy.MdiParent = this;
Mac_dLS_Copy.WindowState = FormWindowState.Maximized;

View File

@@ -63,7 +63,7 @@ namespace WindowsFormsApp1
else
dataGridView.Sort(dataGridView.Columns[col], System.ComponentModel.ListSortDirection.Ascending);
}
/// <summary>
/// * Row헤더에 체크박스를 넣는 기능*
@@ -99,7 +99,7 @@ namespace WindowsFormsApp1
}
private void datagridview_checkBox_Click(object sender, EventArgs e)
{
foreach(DataGridViewRow r in ((DataGridView)sender).Rows)
foreach (DataGridViewRow r in ((DataGridView)sender).Rows)
{
r.Cells["colCheck"].Value = ((CheckBox)sender).Checked;
}
@@ -127,8 +127,8 @@ namespace WindowsFormsApp1
//텝 공백 문자열 동시에 사용하여 분류
// stringInClipboard= stringInClipboard.Replace("\r", "");
if (stringInClipboard == null) return;
List<string>rowsInClipboard = stringInClipboard.Split(rowSpliteter, StringSplitOptions.None).ToList();
rowsInClipboard.RemoveAt(rowsInClipboard.Count-1);
List<string> rowsInClipboard = stringInClipboard.Split(rowSpliteter, StringSplitOptions.None).ToList();
rowsInClipboard.RemoveAt(rowsInClipboard.Count - 1);
//get the row and column of selected cell in dataGridView1
int r = ((DataGridView)sender).SelectedCells[0].RowIndex;
int c = ((DataGridView)sender).SelectedCells[0].ColumnIndex;
@@ -209,7 +209,7 @@ namespace WindowsFormsApp1
private Rectangle dragBoxFromMouseDown;
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;
public void MouseMove(object sender, MouseEventArgs e)
{
DataGridView dataGridView = sender as DataGridView;
@@ -292,7 +292,8 @@ namespace WindowsFormsApp1
string[] db_data = db_res1.Split('|');
string[] db_pur = db_res2.Split('|');
if (db_res1.Length < 3) {
if (db_res1.Length < 3)
{
MessageBox.Show("DB호출 에러!", "Error");
return "False";
}
@@ -300,20 +301,26 @@ namespace WindowsFormsApp1
string fax = string.Empty;
string emchk = string.Empty;
if (db_pur.Length > 3) {
for(int a= 0; a < db_pur.Length; a++)
if (db_pur.Length > 3)
{
for (int a = 0; a < db_pur.Length; a++)
{
if (a % 3 == 0) { // 전화번호
if (db_pur[a] != "") {
if (a % 3 == 0)
{ // 전화번호
if (db_pur[a] != "")
{
tel = db_pur[a];
}
}
if (a % 3 == 1) { // 팩스
if (db_pur[a] != "") {
if (a % 3 == 1)
{ // 팩스
if (db_pur[a] != "")
{
fax = db_pur[a];
}
}
if (a % 3 == 2) { // 팩스 이메일 체크
if (a % 3 == 2)
{ // 팩스 이메일 체크
emchk = db_pur[a];
}
}
@@ -401,7 +408,7 @@ namespace WindowsFormsApp1
#region / (4)
rng = ws.Range["A4", "C4"];
rng.MergeCells = true;
rng.Value2 = "주문일자 : "+DateTime.Now.ToString("yyyy-MM-dd H:m:ss");
rng.Value2 = "주문일자 : " + DateTime.Now.ToString("yyyy-MM-dd H:m:ss");
rng.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
rng.Font.Bold = true;
@@ -495,7 +502,7 @@ namespace WindowsFormsApp1
#region
endcount++;
string = "D"+endcount.ToString();
string = "D" + endcount.ToString();
rng = ws.Range["A" + endcount, "C" + endcount];
rng.MergeCells = true;
@@ -551,7 +558,7 @@ namespace WindowsFormsApp1
rng2.Font.Bold = true;
////////
rng = ws.Range[, "D"+endcount];
rng = ws.Range[, "D" + endcount];
rng.MergeCells = true;
rng.Value2 = "발 송 처";
rng.Font.Bold = true;
@@ -580,10 +587,10 @@ namespace WindowsFormsApp1
application.Interactive = true;
application.Quit();
return FileName;
}
catch(Exception e)
catch (Exception e)
{
MessageBox.Show(e.ToString());
return "False";
@@ -630,9 +637,9 @@ namespace WindowsFormsApp1
private string Excel_Sub(string[] data)
{
string[] length = {
"1", "2", "3", "4", "5",
"6", "7", "8", "9", "10",
"11", "12", "13", "14", "15",
"1", "2", "3", "4", "5",
"6", "7", "8", "9", "10",
"11", "12", "13", "14", "15",
"16", "17", "18", "19", "20",
"21", "22", "23", "24", "25", "26"
};
@@ -646,8 +653,8 @@ namespace WindowsFormsApp1
string count = data.Length.ToString();
string res = string.Empty;
for(int a = 0; a < length.Length; a++)
for (int a = 0; a < length.Length; a++)
{
if (length[a] == count)
{
@@ -658,7 +665,7 @@ namespace WindowsFormsApp1
}
#endregion
}
public class Helper_Print
public class Helper_Print
{
/// <summary>
/// 행의 갯수
@@ -788,7 +795,7 @@ namespace WindowsFormsApp1
/// <param name="file_name"></param>
/// <param name="fax_param">[0] 발신번호 / [1] 수신번호
/// / [2] 수신자 회사명 / [3 ]수신자명 </param>
public string Send_BaroFax(string file_name, string[] fax_param )
public string Send_BaroFax(string file_name, string[] fax_param)
{
BaroService_FAXSoapClient fAXSoapClient = new BaroService_FAXSoapClient();
@@ -824,7 +831,7 @@ namespace WindowsFormsApp1
BaroService_FAXSoapClient fAXSoapClient = new BaroService_FAXSoapClient();
// 수신자회사명, 수신번호, 전송일시, 전송결과, 전송페이지수, 성공페이지수, 전송파일명
string[] MsgBox_Array = {
string[] MsgBox_Array = {
fAXSoapClient.GetFaxMessage(CERTKEY, CorpNum, sendkey).ReceiveCorp,
fAXSoapClient.GetFaxMessage(CERTKEY, CorpNum, sendkey).ReceiverNum,
fAXSoapClient.GetFaxMessage(CERTKEY, CorpNum, sendkey).SendDT,
@@ -1190,9 +1197,9 @@ namespace WindowsFormsApp1
public bool IsConnected { get; set; }
private string ipAddr = string.Empty;
private string Port = string.Empty;
private string Port = string.Empty;
private string userId = string.Empty;
private string Pwd = string.Empty;
private string Pwd = string.Empty;
public FTP() { }
@@ -1219,7 +1226,7 @@ namespace WindowsFormsApp1
using (ftpRequest.GetResponse()) { }
this.IsConnected = true;
}
catch(Exception ex)
catch (Exception ex)
{
this.LastException = ex;
System.Reflection.MemberInfo info = System.Reflection.MethodInfo.GetCurrentMethod();
@@ -1288,7 +1295,7 @@ namespace WindowsFormsApp1
buff = null;
}
}
catch(Exception ex)
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
this.LastException = ex;
@@ -1392,14 +1399,14 @@ namespace WindowsFormsApp1
if (reader != null) reader.Close();
foreach(string file in result.ToString().Split('\n'))
foreach (string file in result.ToString().Split('\n'))
{
resultList.Add(file);
}
}
return resultList;
}
catch(Exception ex)
catch (Exception ex)
{
this.LastException = ex;
@@ -1420,12 +1427,12 @@ namespace WindowsFormsApp1
try
{
foreach(string tmpFolder in arrDir)
foreach (string tmpFolder in arrDir)
{
try
{
if (tmpFolder == string.Empty) continue;
currentDir += @"/" + tmpFolder;
string url = string.Format(@"FTP://{0}:{1}/{2}", this.ipAddr, this.Port, currentDir);
@@ -1453,9 +1460,11 @@ namespace WindowsFormsApp1
private void checkDir(string localFullPathFile)
{
FileInfo finfo = new FileInfo(localFullPathFile);
if (!finfo.Exists) {
if (!finfo.Exists)
{
DirectoryInfo dInfo = new DirectoryInfo(finfo.DirectoryName);
if (!dInfo.Exists) {
if (!dInfo.Exists)
{
dInfo.Create();
}
}
@@ -1552,30 +1561,35 @@ namespace WindowsFormsApp1
int tDown = 0;
for (int a = 0; a < array_text.Count; a++)
{
// if (array_text[a] == "") continue;
// if (array_text[a] == "") continue;
num.Add(array_text[a].Substring(0, 3));
if (array_text[a][5] == '▼') {
if (array_text[a][5] == '▼')
{
array_text[a] = array_text[a].Remove(0, 3);
}
else {
else
{
array_text[a] = array_text[a].Remove(0, 5);
}
+= array_text[a] + "\n";
int textLength = 0;
if (EncodingType == "UTF-8") {
if (EncodingType == "UTF-8")
{
textLength = Encoding.UTF8.GetBytes(array_text[a]).Length
- WordCheck(array_text[a], "▲")
- WordCheck(array_text[a], "▼");
}
else if (EncodingType == "UniCode") {
else if (EncodingType == "UniCode")
{
textLength = Encoding.Unicode.GetBytes(array_text[a]).Length
- WordCheck(array_text[a], "▲")
- WordCheck(array_text[a], "▼");
}
else { // ANSI
else
{ // ANSI
textLength = Encoding.Default.GetBytes(array_text[a]).Length
- WordCheck(array_text[a], "▲")
- WordCheck(array_text[a], "▼");
@@ -1587,12 +1601,13 @@ namespace WindowsFormsApp1
for (int a = 0; a < array_text.Count; a++)
{
if (a == 0) { //total.Add("0");
if (a == 0)
{ //total.Add("0");
tTotal.Add(0);
}
else
{
// total.Add(total[a - 1] + count[a - 1]);
// total.Add(total[a - 1] + count[a - 1]);
tTotal.Add(tTotal[a - 1] + tCount[a - 1]);
}
//else if (a == 1)
@@ -1609,7 +1624,7 @@ namespace WindowsFormsApp1
// else c = Convert.ToInt32(Encoding.Default.GetBytes(array_text[a - 2]).Length.ToString()) - WordCheck(array_text[a - 2], "▲") - WordCheck(array_text[a - 2], "▼");
// int res = b + c;
// total.Add(res.ToString());
}
string[] str_num = num.ToArray();
@@ -1626,7 +1641,7 @@ namespace WindowsFormsApp1
// else if (total[a].Length == 2) { total[a] = total[a].Insert(0, "000"); }
// else if (total[a].Length == 1) { total[a] = total[a].Insert(0, "0000"); }
// 디렉토리 += str_num[a] + count[a] + total[a] + "\n";
+= str_num[a] + tCount[a].ToString().PadLeft(4, '0') + tTotal[a].ToString().PadLeft(5, '0');
+= str_num[a] + tCount[a].ToString().PadLeft(4, '0') + tTotal[a].ToString().PadLeft(5, '0');
}
string[] = { "00000","n", "a", "m", " ",
@@ -1642,11 +1657,11 @@ namespace WindowsFormsApp1
string dp = + ;
int recode = 0;
if (EncodingType == "UTF-8") recode = Encoding.UTF8.GetBytes(dp).Length- WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
if (EncodingType == "UTF-8") recode = Encoding.UTF8.GetBytes(dp).Length - WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
else if (EncodingType == "UniCode") recode = Encoding.Unicode.GetBytes(dp).Length - WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
else recode = Encoding.Default.GetBytes(dp).Length- WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
else recode = Encoding.Default.GetBytes(dp).Length - WordCheck(dp, "▲") - WordCheck(dp, "▼") - WordCheck(dp, "↔");
[0] = insert_Zero(recode + 24, 5);
int data_addr = 24 + Encoding.Default.GetBytes().Length - WordCheck(, "▲");
@@ -1693,7 +1708,7 @@ namespace WindowsFormsApp1
return result;
}
#endregion
/// <summary>
/// 추가하고 싶은 태그를 뷰형태의 마크에 추가하는 함수.
@@ -1706,7 +1721,7 @@ namespace WindowsFormsApp1
if (Tag.Length < 3) return "";
int TargetTagNum = Convert.ToInt32(Tag.Substring(0, 3));
string[] SplitView = TypeView.Split('\n');
List<string> View = new List<string>(SplitView);
@@ -1731,9 +1746,9 @@ namespace WindowsFormsApp1
/// <param name="pAddTag">추가할 태그 (태그명\t지시기호\t태그내용)</param>
/// <param name="pTargetData">뷰형태의 마크</param>
/// <returns></returns>
public string AddTagInMarc(int pTargetTagNum,string pAddTag, string pTargetData)//TagTarget Num 을 찾아서 있을경우는 해당 Tag 데이터를 전송, 없을경우는 신규로 해야함.
public string AddTagInMarc(int pTargetTagNum, string pAddTag, string pTargetData)//TagTarget Num 을 찾아서 있을경우는 해당 Tag 데이터를 전송, 없을경우는 신규로 해야함.
{
if (pAddTag.Length < 3) return "";
string tRet = pTargetData;
// ex ) 020 : ~~~ 에 XXXX 내용줄 뒤에 추가
@@ -1827,7 +1842,7 @@ namespace WindowsFormsApp1
}
}
}
}
}
else
{// 기존 태그 변경
int endIdx = SplitView[a].IndexOf("▼", startIdx + 1);
@@ -1906,7 +1921,7 @@ namespace WindowsFormsApp1
/// <param name="marc">마크 데이터</param>
/// <param name="search">추출할 함수(배열)</param>
/// <returns></returns>
public string[] Take_Tag(string marc, string[] search,bool pSearchTag = false)
public string[] Take_Tag(string marc, string[] search, bool pSearchTag = false)
{
string[] ary = marc.Split('');
string[] tag = res_dir(ary[0].Substring(24));
@@ -1958,7 +1973,7 @@ namespace WindowsFormsApp1
//memo = result[b];
start += 2;
int end = -1;
if (tmp.Length > 1) end=tmp.IndexOf("", start);
if (tmp.Length > 1) end = tmp.IndexOf("", start);
if (memo == result[b])
break;
@@ -2188,7 +2203,8 @@ namespace WindowsFormsApp1
/// <param name="e">EventArgs</param>
public void Int_Comma(object sender, EventArgs e)
{
if (((TextBox)sender).Text != "") {
if (((TextBox)sender).Text != "")
{
string text;
text = ((TextBox)sender).Text.Replace(",", "");
((TextBox)sender).Text = String.Format("{0:#,###}", Convert.ToInt32(text));
@@ -2204,7 +2220,7 @@ namespace WindowsFormsApp1
public bool isContainHangul(string value)
{
char[] charArr = value.ToCharArray();
foreach(char c in charArr)
foreach (char c in charArr)
{
if (char.GetUnicodeCategory(c) == System.Globalization.UnicodeCategory.OtherLetter)
return true;
@@ -2221,7 +2237,7 @@ namespace WindowsFormsApp1
public bool CheckString(string value, string chkString)
{
int index = value.IndexOf(chkString);
if (index < 0)
if (index < 0)
return false;
return true;
@@ -2264,10 +2280,10 @@ namespace WindowsFormsApp1
public class API
{
public string CheckString(string pText,string pStr)
public string CheckString(string pText, string pStr)
{
string tRet = pText;
Regex reg = new Regex(@"([\"+pStr+"]+)" + @"[가-힣]+");//+ @"([\>]+)");//new Regex(@"([\<]+)"+ @"[ㄱ-ㅎ가-힣]+"+@"([\>]+)");
Regex reg = new Regex(@"([\" + pStr + "]+)" + @"[가-힣]+");//+ @"([\>]+)");//new Regex(@"([\<]+)"+ @"[ㄱ-ㅎ가-힣]+"+@"([\>]+)");
MatchCollection tMatch = reg.Matches(tRet);
for (int i = 0; i < tMatch.Count; i++)
{
@@ -2326,8 +2342,9 @@ namespace WindowsFormsApp1
xml = CheckString(xml, "〈");
doc.LoadXml(xml);
}
catch (Exception ex){
return "";
catch (Exception ex)
{
return "";
}
var json = JsonConvert.SerializeXmlNode(doc);
@@ -2520,19 +2537,23 @@ namespace WindowsFormsApp1
{
if (length == 1)
{
try {
try
{
tmp_data.Add(docs[Param[b]]["#text"]);
}
catch (KeyNotFoundException e) {
catch (KeyNotFoundException e)
{
tmp_data.Add("");
}
}
else
{
try {
try
{
tmp_data.Add(docs[a][Param[b]]["#text"]);
}
catch (KeyNotFoundException e) {
catch (KeyNotFoundException e)
{
tmp_data.Add("");
}
}
@@ -2649,8 +2670,8 @@ namespace WindowsFormsApp1
return dialogResult;
}
}
public class PrintLine
{
public class PrintLine
{
string num { get; set; }
string count { get; set; }
string list_name { get; set; }
@@ -2962,16 +2983,21 @@ namespace WindowsFormsApp1
public string VersionInfo()
{
string version = "";
StreamReader sr = new StreamReader(Application.StartupPath + "\\update.inf");
while (!sr.EndOfStream)
var updatefile = $"{Application.StartupPath}\\update.inf";
if (System.IO.File.Exists(updatefile))
{
string line = sr.ReadLine();
if (line.IndexOf("count=", 0) != -1)
StreamReader sr = new StreamReader(updatefile);
while (!sr.EndOfStream)
{
version = line.Replace("count=", "");
break;
string line = sr.ReadLine();
if (line.IndexOf("count=", 0) != -1)
{
version = line.Replace("count=", "");
break;
}
}
}
else version = "0";
return version;
}
}

View File

@@ -36,7 +36,7 @@
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
@@ -100,6 +100,15 @@
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="Microsoft.Web.WebView2.Core, Version=1.0.3351.48, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.3351.48\lib\net462\Microsoft.Web.WebView2.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.WebView2.WinForms, Version=1.0.3351.48, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.3351.48\lib\net462\Microsoft.Web.WebView2.WinForms.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.WebView2.Wpf, Version=1.0.3351.48, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.3351.48\lib\net462\Microsoft.Web.WebView2.Wpf.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference>
@@ -191,6 +200,7 @@
<Compile Include="SearchModel\ILibrarySearcher.cs" />
<Compile Include="SearchModel\KwangjuCityLibrarySearcher.cs" />
<Compile Include="SearchModel\NamguLibrarySearcher.cs" />
<Compile Include="WebView2Installer.cs" />
<Compile Include="마스터\From_User_manage_List.cs">
<SubType>Form</SubType>
</Compile>
@@ -1950,5 +1960,7 @@
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Selenium.WebDriver.4.16.2\build\Selenium.WebDriver.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Selenium.WebDriver.4.16.2\build\Selenium.WebDriver.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Web.WebView2.1.0.3351.48\build\Microsoft.Web.WebView2.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Web.WebView2.1.0.3351.48\build\Microsoft.Web.WebView2.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.Web.WebView2.1.0.3351.48\build\Microsoft.Web.WebView2.targets" Condition="Exists('..\packages\Microsoft.Web.WebView2.1.0.3351.48\build\Microsoft.Web.WebView2.targets')" />
</Project>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>E:\UniMarcApplicationUpdateFiles\|ftp://ftpgloria%401.215.250.130/|ftp://ftpgloria%401.215.250.130:50005/|sftp://ftpgloria%401.215.250.130/|ftp://ftpgloria%401.215.250.130/unimarc/</PublishUrlHistory>

View File

@@ -0,0 +1,510 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Web.WebView2.Core;
namespace WindowsFormsApp1
{
public static class WebView2Installer
{
// Fixed Version 다운로드 URL (CAB 파일 사용)
private const string WEBVIEW2_FIXED_VERSION_URL = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/759b508a-00bb-4724-9b87-2703c8417737/Microsoft.WebView2.FixedVersionRuntime.139.0.3405.86.x86.cab";
private const string INSTALLER_FILENAME = "Microsoft.WebView2.FixedVersionRuntime.139.0.3405.86.x86.cab";
// Fixed Version 런타임을 애플리케이션 폴더에 배치할 경로
private const string FIXED_VERSION_FOLDER = "WebView2Runtime";
/// <summary>
/// WebView2 Fixed Version 환경을 준비 (항상 Fixed Version 사용)
/// </summary>
public static async Task<CoreWebView2Environment> GetWebView2EnvironmentAsync()
{
try
{
// 일관성을 위해 항상 Fixed Version 사용
string fixedVersionPath = GetFixedVersionPath();
// Fixed Version 런타임이 이미 있는지 확인
string actualRuntimePath = FindActualRuntimePath(fixedVersionPath);
if (!string.IsNullOrEmpty(actualRuntimePath))
{
try
{
// Fixed Version 사용 시 환경 옵션 명시적 지정
string userDataFolder = Path.Combine(Application.StartupPath, "WebView2UserData");
// 사용자 데이터 폴더 생성
if (!Directory.Exists(userDataFolder))
{
Directory.CreateDirectory(userDataFolder);
}
// 런타임 버전 정보 확인
try
{
string version = CoreWebView2Environment.GetAvailableBrowserVersionString(actualRuntimePath);
}
catch (Exception verEx)
{
MessageBox.Show(
$"런타임 버전 확인 실패:\n\n" +
$"경로: {actualRuntimePath}\n" +
$"오류: {verEx.Message}",
"버전 확인 오류",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
}
return await CoreWebView2Environment.CreateAsync(actualRuntimePath, userDataFolder);
}
catch (WebView2RuntimeNotFoundException ex)
{
MessageBox.Show(
$"WebView2 환경 생성 실패!\n\n" +
$"런타임 경로: {actualRuntimePath}\n" +
$"오류: {ex.Message}\n\n" +
$"런타임을 다시 다운로드합니다.",
"WebView2 환경 오류",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
// 기존 런타임 폴더 삭제 후 재다운로드
try
{
Directory.Delete(fixedVersionPath, true);
}
catch { }
}
}
// Fixed Version 런타임 다운로드 및 배치
bool success = await DownloadFixedVersionRuntime();
if (success)
{
actualRuntimePath = FindActualRuntimePath(fixedVersionPath);
if (!string.IsNullOrEmpty(actualRuntimePath))
{
try
{
// 다운로드 후 환경 생성 시도 (Fixed Version)
string userDataFolder = Path.Combine(Application.StartupPath, "WebView2UserData");
// 사용자 데이터 폴더 생성
if (!Directory.Exists(userDataFolder))
{
Directory.CreateDirectory(userDataFolder);
}
var environment = await CoreWebView2Environment.CreateAsync(actualRuntimePath, userDataFolder);
return environment;
}
catch (WebView2RuntimeNotFoundException ex)
{
MessageBox.Show(
$"다운로드 후에도 WebView2 환경 생성 실패!\n\n" +
$"런타임 경로: {actualRuntimePath}\n" +
$"오류: {ex.Message}\n\n" +
$"해당 경로의 파일들을 확인해주세요.",
"WebView2 환경 생성 최종 실패",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
throw;
}
}
else
{
MessageBox.Show(
$"다운로드는 완료되었지만 유효한 런타임 경로를 찾을 수 없습니다.\n\n" +
$"기본 경로: {fixedVersionPath}",
"런타임 경로 탐색 실패",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
}
throw new Exception("WebView2 Fixed Version 런타임을 사용할 수 없습니다.");
}
catch (Exception ex)
{
MessageBox.Show(
$"WebView2 Fixed Version 환경 준비 중 오류가 발생했습니다: {ex.Message}",
"오류",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
throw;
}
}
/// <summary>
/// Fixed Version 런타임 경로 반환
/// </summary>
private static string GetFixedVersionPath()
{
string appPath = Application.StartupPath;
return Path.Combine(appPath, FIXED_VERSION_FOLDER);
}
/// <summary>
/// 실제 WebView2 런타임 폴더 경로를 찾는 메서드
/// </summary>
private static string FindActualRuntimePath(string basePath)
{
try
{
if (!Directory.Exists(basePath))
return null;
// WebView2 런타임의 주요 파일들 (우선순위대로)
string targetFiles = "msedgewebview2.exe";
var targetfi = new System.IO.FileInfo(System.IO.Path.Combine(basePath, targetFiles));
if(targetfi.Exists) return targetfi.Directory.FullName;
//루트에 없었으니 서브폴더에서 찾는다
foreach(var subdir in targetfi.Directory.GetDirectories())
{
var fi = new System.IO.FileInfo(System.IO.Path.Combine(subdir.FullName, targetFiles));
if (fi.Exists) return fi.Directory.FullName;
}
return null;
}
catch (Exception ex)
{
// 디버깅을 위한 예외 정보 출력
MessageBox.Show(
$"FindActualRuntimePath 오류:\n{ex.Message}\n\n기본 경로: {basePath}",
"런타임 경로 탐색 오류",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
return null;
}
}
/// <summary>
/// 서브디렉토리에서 WebView2 런타임 파일 검색
/// </summary>
private static string SearchInSubDirectories(string currentPath, string[] targetFiles, int currentDepth, int maxDepth)
{
if (currentDepth >= maxDepth || !Directory.Exists(currentPath))
return null;
try
{
// 현재 경로의 모든 서브디렉토리 검색
foreach (string subDir in Directory.GetDirectories(currentPath))
{
// 각 대상 파일을 해당 서브디렉토리에서 확인
foreach (string targetFile in targetFiles)
{
string fullPath = Path.Combine(subDir, targetFile);
if (File.Exists(fullPath))
{
string candidatePath;
// EBWebView 하위 파일인 경우 해당 디렉토리 반환
if (targetFile.Contains("\\"))
{
candidatePath = Path.Combine(subDir, Path.GetDirectoryName(targetFile));
}
else
{
candidatePath = subDir;
}
// 런타임 유효성 검증
if (ValidateWebView2Runtime(candidatePath))
{
return candidatePath;
}
}
}
// 재귀적으로 더 깊은 폴더 검색
string result = SearchInSubDirectories(subDir, targetFiles, currentDepth + 1, maxDepth);
if (!string.IsNullOrEmpty(result))
return result;
}
return null;
}
catch
{
return null;
}
}
/// <summary>
/// WebView2 런타임이 유효한지 검증
/// </summary>
private static bool ValidateWebView2Runtime(string runtimePath)
{
try
{
if (string.IsNullOrEmpty(runtimePath) || !Directory.Exists(runtimePath))
return false;
// 필수 파일들 체크
string[] requiredFiles = {
"msedgewebview2.exe",
"WebView2Loader.dll"
};
foreach (string file in requiredFiles)
{
if (!File.Exists(Path.Combine(runtimePath, file)))
{
return false;
}
}
return true;
}
catch
{
return false;
}
}
/// <summary>
/// Fixed Version WebView2 런타임 다운로드 및 배치
/// </summary>
private static async Task<bool> DownloadFixedVersionRuntime()
{
try
{
var fi = new System.IO.FileInfo(Path.Combine(".\\Temp", INSTALLER_FILENAME));
if (fi.Directory.Exists == false) fi.Directory.Create();
string extractPath = GetFixedVersionPath();
// 진행상황 표시 폼
var progressForm = new Form()
{
Text = "WebView2 런타임 다운로드",
Size = new System.Drawing.Size(400, 120),
FormBorderStyle = FormBorderStyle.FixedDialog,
StartPosition = FormStartPosition.CenterScreen,
MaximizeBox = false,
MinimizeBox = false,
//TopMost = true,
};
var progressBar = new ProgressBar()
{
Location = new System.Drawing.Point(20, 20),
Size = new System.Drawing.Size(340, 23),
Style = ProgressBarStyle.Continuous
};
var statusLabel = new Label()
{
Location = new System.Drawing.Point(20, 50),
Size = new System.Drawing.Size(340, 20),
Text = "다운로드 준비 중..."
};
progressForm.Controls.Add(progressBar);
progressForm.Controls.Add(statusLabel);
progressForm.Show();
if (System.IO.File.Exists(fi.FullName) == false)
{
// 다운로드
using (var client = new WebClient())
{
client.DownloadProgressChanged += (s, e) =>
{
progressBar.Value = e.ProgressPercentage;
statusLabel.Text = $"다운로드 중... {e.ProgressPercentage}%";
Application.DoEvents();
};
await client.DownloadFileTaskAsync(WEBVIEW2_FIXED_VERSION_URL, fi.FullName);
}
}
statusLabel.Text = "CAB 파일 압축 해제 중...";
progressBar.Style = ProgressBarStyle.Marquee;
Application.DoEvents();
// CAB 파일 압축 해제를 위한 경로 생성
if (!Directory.Exists(extractPath))
{
Directory.CreateDirectory(extractPath);
}
// Windows expand 명령어를 사용하여 CAB 파일 압축 해제
bool extractSuccess = await ExtractCabFileAsync(fi.FullName, extractPath);
statusLabel.Text = "런타임 경로 확인 중...";
Application.DoEvents();
if (!extractSuccess)
{
progressForm.Close();
throw new Exception("CAB 파일 압축 해제에 실패했습니다.");
}
// 실제 런타임 경로 확인
string actualPath = FindActualRuntimePath(extractPath);
if (string.IsNullOrEmpty(actualPath))
{
progressForm.Close();
throw new Exception("압축 해제는 완료되었지만 WebView2 런타임을 찾을 수 없습니다.");
}
statusLabel.Text = "설정 완료 중...";
Application.DoEvents();
// 잠시 대기 후 폼 닫기
await Task.Delay(500);
progressForm.Close();
return Directory.Exists(extractPath);
}
catch (Exception ex)
{
MessageBox.Show(
$"WebView2 런타임 준비 중 오류가 발생했습니다: {ex.Message}",
"오류",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
return false;
}
}
/// <summary>
/// CAB 파일을 압축 해제하는 메서드
/// </summary>
private static async Task<bool> ExtractCabFileAsync(string cabFilePath, string extractPath)
{
try
{
//// 디버깅 정보 표시
//MessageBox.Show(
// $"CAB 압축 해제 시작\n\n" +
// $"CAB 파일: {cabFilePath}\n" +
// $"압축 해제 경로: {extractPath}\n" +
// $"CAB 파일 존재: {File.Exists(cabFilePath)}\n" +
// $"CAB 파일 크기: {(File.Exists(cabFilePath) ? new FileInfo(cabFilePath).Length.ToString("N0") + " bytes" : "파일 없음")}",
// "디버깅 정보",
// MessageBoxButtons.OK,
// MessageBoxIcon.Information
//);
// Windows expand 명령어를 사용하여 CAB 파일 압축 해제
var startInfo = new ProcessStartInfo("expand.exe")
{
Arguments = $"\"{cabFilePath}\" -F:* \"{extractPath}\"",
UseShellExecute = false,
CreateNoWindow = true, // 콘솔 창 보이게 설정
RedirectStandardOutput = false, // 출력 리다이렉션 해제
RedirectStandardError = false // 에러 리다이렉션 해제
};
using (var process = Process.Start(startInfo))
{
// 최대 30초 대기
bool exited = await Task.Run(() => process.WaitForExit(30000));
if (!exited)
{
// 프로세스가 30초 내에 완료되지 않으면 강제 종료
try
{
process.Kill();
}
catch { }
return false;
}
// 압축 해제 성공 여부 확인
bool success = process.ExitCode == 0;
if (success == false)
{
try
{
System.IO.File.Delete(cabFilePath);
}
catch (Exception ex)
{
Console.WriteLine("remove cab file : " + ex.Message);
}
}
// 실제 런타임 파일이 있는지 확인
if (success)
{
string actualPath = FindActualRuntimePath(extractPath);
success = !string.IsNullOrEmpty(actualPath);
// 런타임을 찾지 못한 경우 디버깅 정보 표시
if (!success)
{
string[] extractedFiles = Directory.Exists(extractPath) ? Directory.GetFiles(extractPath, "*", SearchOption.AllDirectories) : new string[0];
string[] extractedDirs = Directory.Exists(extractPath) ? Directory.GetDirectories(extractPath, "*", SearchOption.AllDirectories) : new string[0];
MessageBox.Show(
$"WebView2 런타임 파일을 찾을 수 없습니다!\n\n" +
$"압축 해제 경로: {extractPath}\n" +
$"압축 해제된 파일 수: {extractedFiles.Length}\n" +
$"압축 해제된 폴더 수: {extractedDirs.Length}\n\n" +
$"상위 5개 파일:\n{string.Join("\n", extractedFiles.Take(5))}\n\n" +
$"모든 폴더:\n{string.Join("\n", extractedDirs)}",
"런타임 파일 탐색 실패",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
}
}
return success;
}
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// WebView2 Fixed Version 런타임 상태 정보 반환
/// </summary>
public static string GetWebView2Status()
{
try
{
string fixedVersionPath = GetFixedVersionPath();
string actualRuntimePath = FindActualRuntimePath(fixedVersionPath);
if (!string.IsNullOrEmpty(actualRuntimePath))
{
return $"WebView2 Fixed Version 런타임이 준비되어 있습니다.\n경로: {actualRuntimePath}\n버전: 139.0.3405.86";
}
else
{
return "WebView2 Fixed Version 런타임이 준비되어 있지 않습니다.";
}
}
catch (Exception ex)
{
return $"WebView2 Fixed Version 런타임 확인 실패: {ex.Message}";
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -2553,6 +2553,8 @@
<member name="P:Newtonsoft.Json.JsonReader.MaxDepth">
<summary>
Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
A null value means there is no maximum.
The default value is <c>128</c>.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonReader.TokenType">
@@ -3012,7 +3014,7 @@
<summary>
Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
A null value means there is no maximum.
The default value is <c>null</c>.
The default value is <c>128</c>.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent">
@@ -3328,7 +3330,7 @@
<summary>
Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>.
A null value means there is no maximum.
The default value is <c>null</c>.
The default value is <c>128</c>.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting">
@@ -7090,6 +7092,27 @@
</summary>
<value>The comparison used to match property names while merging.</value>
</member>
<member name="T:Newtonsoft.Json.Linq.JsonSelectSettings">
<summary>
Specifies the settings used when selecting JSON.
</summary>
</member>
<member name="P:Newtonsoft.Json.Linq.JsonSelectSettings.RegexMatchTimeout">
<summary>
Gets or sets a timeout that will be used when executing regular expressions.
</summary>
<value>The timeout that will be used when executing regular expressions.</value>
</member>
<member name="P:Newtonsoft.Json.Linq.JsonSelectSettings.ErrorWhenNoMatch">
<summary>
Gets or sets a flag that indicates whether an error should be thrown if
no tokens are found when evaluating part of the expression.
</summary>
<value>
A flag that indicates whether an error should be thrown if
no tokens are found when evaluating part of the expression.
</value>
</member>
<member name="T:Newtonsoft.Json.Linq.JToken">
<summary>
Represents an abstract JSON token.
@@ -7985,6 +8008,16 @@
<param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.</param>
<returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,Newtonsoft.Json.Linq.JsonSelectSettings)">
<summary>
Selects a <see cref="T:Newtonsoft.Json.Linq.JToken"/> using a JSONPath expression. Selects the token that matches the object path.
</summary>
<param name="path">
A <see cref="T:System.String"/> that contains a JSONPath expression.
</param>
<param name="settings">The <see cref="T:Newtonsoft.Json.Linq.JsonSelectSettings"/> used to select tokens.</param>
<returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JToken.SelectTokens(System.String)">
<summary>
Selects a collection of elements using a JSONPath expression.
@@ -8004,6 +8037,16 @@
<param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.</param>
<returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the selected elements.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JToken.SelectTokens(System.String,Newtonsoft.Json.Linq.JsonSelectSettings)">
<summary>
Selects a collection of elements using a JSONPath expression.
</summary>
<param name="path">
A <see cref="T:System.String"/> that contains a JSONPath expression.
</param>
<param name="settings">The <see cref="T:Newtonsoft.Json.Linq.JsonSelectSettings"/> used to select tokens.</param>
<returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the selected elements.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)">
<summary>
Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object.

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="UniMarc.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
@@ -18,19 +18,31 @@
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://testws.baroservice.com/FAX.asmx" binding="basicHttpBinding"
bindingConfiguration="BaroService_FAXSoap" contract="BaroService_API.BaroService_FAXSoap"
name="BaroService_FAXSoap" />
<endpoint address="https://testws.baroservice.com/TI.asmx" binding="basicHttpBinding"
bindingConfiguration="BaroService_TISoap" contract="BaroService_TI.BaroService_TISoap"
name="BaroService_TISoap" />
<endpoint address="http://testws.baroservice.com/FAX.asmx" binding="basicHttpBinding" bindingConfiguration="BaroService_FAXSoap" contract="BaroService_API.BaroService_FAXSoap" name="BaroService_FAXSoap" />
<endpoint address="https://testws.baroservice.com/TI.asmx" binding="basicHttpBinding" bindingConfiguration="BaroService_TISoap" contract="BaroService_TI.BaroService_TISoap" name="BaroService_TISoap" />
</client>
</system.serviceModel>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Renci.SshNet" publicKeyToken="1cee9f8bde3db106" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2020.0.1.0" newVersion="2020.0.1.0"/>
<assemblyIdentity name="Renci.SshNet" publicKeyToken="1cee9f8bde3db106" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2020.0.1.0" newVersion="2020.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -1,4 +0,0 @@
9788969524102 1 간호사를 간호하는 간호사 경향BP 오성훈 13500 60 8100 [(주)글로리아북]납품 2021-07-14 오후 1:44 머리 10
9791195010073 1 감정조절자(희망) : 나를 힘겹게 하는 나와 작별하기 프로젝트 헥소미아 김인자 16000 60 9600 [(주)글로리아북]납품 2021-07-14 오후 1:44 머리 11
9788932320625 1 개는 우리를 어떻게 사랑하는가 : 개의 특별한 애정에 대한 과학적 탐구 현암사 클라이브 D. L. 윈 ; 전행선 17000 60 10200 [(주)글로리아북]납품 2021-07-14 오후 1:44 머리 12
9791158491307 1 걷다 느끼다 쓰다 : 전문성과 대중성을 겸비한 글쓰기 수업 모아북스 이해사 15000 60 9000 [(주)글로리아북]납품 2021-07-14 오후 1:44 머리 13

View File

@@ -1 +1 @@
a980cc54cfee34721f8734aaae513dd71cd3d934
ad16a35a70790c263cbf0747895a86ffbd27fa022d03cce7d7af9bfcd3678dcd

View File

@@ -152,3 +152,191 @@ C:\Users\Administrator\Desktop\unimarc\unimarc\UniMarc\bin\Debug\arControl.Net4.
C:\Users\Administrator\Desktop\unimarc\unimarc\UniMarc\bin\Debug\CarlosAg.ExcelXmlWriter.dll
C:\Users\Administrator\Desktop\unimarc\unimarc\UniMarc\bin\Debug\arCommUtil.dll
C:\Users\Administrator\Desktop\unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.AssemblyReference.cache
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\selenium-manager\linux\selenium-manager
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\selenium-manager\macos\selenium-manager
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\selenium-manager\windows\selenium-manager.exe
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\runtimes\win-x86\native\WebView2Loader.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\UniMarc.exe.config
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\UniMarc.exe
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\UniMarc.pdb
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\ko\UniMarc.resources.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\AngleSharp.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\arCommUtil.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\arControl.Net4.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\ArLog.Net4.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\CarlosAg.ExcelXmlWriter.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\ICSharpCode.SharpZipLib.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Bcl.AsyncInterfaces.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.Core.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.WinForms.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.Wpf.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Win32.Registry.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Newtonsoft.Json.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Renci.SshNet.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Buffers.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Memory.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Numerics.Vectors.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Security.AccessControl.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Security.Principal.Windows.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Encoding.CodePages.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Encodings.Web.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Json.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Threading.Tasks.Extensions.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.ValueTuple.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\WebDriver.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\WebDriver.Support.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\WebDriverManager.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\AngleSharp.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\ICSharpCode.SharpZipLib.pdb
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\ICSharpCode.SharpZipLib.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Bcl.AsyncInterfaces.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.Wpf.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Win32.Registry.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Newtonsoft.Json.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Renci.SshNet.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Buffers.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Memory.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Numerics.Vectors.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Runtime.CompilerServices.Unsafe.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Security.AccessControl.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Security.Principal.Windows.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Encoding.CodePages.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Encodings.Web.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Text.Json.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.Threading.Tasks.Extensions.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\System.ValueTuple.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\WebDriver.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\WebDriver.Support.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.Core.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\bin\Debug\Microsoft.Web.WebView2.WinForms.xml
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.AssemblyReference.cache
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\Interop.SHDocVw.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.ResolveComReference.cache
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.From_User_manage_List.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.AddMarc.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.AddMarc_FillBlank.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.CD_LP.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.CD_LP_AddList.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.CD_LP_List.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.CD_LP_SelectList.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.CD_LP_Sub.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Check_copyWD.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Check_Copy_Login.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Help_007.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Help_008.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Mac_List_Add.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.MarcCopySelect.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.Marc_FillBlank.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.납품관리.Bring_Back.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.납품관리.Order_Send_Chk.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.All_Book_Detail.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.All_Book_manage_Add.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.All_Book_manage_Edit.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Check_Copy_Sub_List.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Check_Copy_Sub_Search.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Check_ISBN_Split.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Check_ISBN_Sub.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Check_ISBN_Yes24.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.DLS_Manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\ExcelTest.findNchange.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\ExcelTest.Helper008.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Job_Order.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Mac_Chack_Up.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Mac_List_Merge.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Mac_Stat_Stat.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_mkList.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_ClassSymbol.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_GearExcel.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_PrintLabel.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_Sub_MarcEdit.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_Sub_SelectList.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_Sub_SelectList_Edit.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Plan_Sub_SelectList_Morge.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_Preview.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Make_Document.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\ExcelTest.Marc.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Marc_memo.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.마크.Search_Infor_Sub.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.ShowDeleteMarc.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.마크.Zoom_Picture.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Bill_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.회계.Part_time.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Purchase_Aggregation.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Purchase_Book.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Purchase_Input.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Remit_reg2.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.회계.Sales_Book.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Sales_Lookup.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Sales_Deposit.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.회계.Sales_Detail.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Sales_Input.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Purchase_not_pay.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Remit_reg.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.회계.Sales_In_Pay.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Account.Sales_Not_Pay.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Board.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Calendar.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Quick_menu.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Sale_End.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Sale_Member_Manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Sale_Sale.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Sale_Settlement.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Send_Notice.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Convenience.Talk.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Book_Lookup.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Commodity_Edit.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Commodity_Morge.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Commodity_registration.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Commodity_Search.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Input_Lookup_Stock.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.List_aggregation.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.List_Chk_Work.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.List_Lookup.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Order_input.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Order_input_Search.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Delivery.Purchase.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.DLS.Input_DLS.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.DLS.School_Lookup.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Book_infor_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.ledger_of_use.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.memo.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Order_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.pw_change.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Transaction_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Home_User_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.User_Infor.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home._Sub_Search_Form.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.All_Book_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Check_copy.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Check_ISBN.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Collect_Mac.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.DLS_Copy.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Mac_Output.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Equip_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Mac_Stat.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Mac_Input.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Mac_List.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Marc_Plan.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Nonverbal.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Search_Infor.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Set_Macro.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Setup_Shortcut.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac.Symbol_Add.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Batch_processing.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Mac_Setting.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Notice_Send.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Sales_Details.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.User_account_inquiry.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.User_manage.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.login.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Main.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.Properties.Resources.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Work_log.Work_Log.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\WindowsFormsApp1.Home.Home_User_manage.ko.resources
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.GenerateResource.cache
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.CoreCompileInputs.cache
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\ko\UniMarc.resources.dll
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.csproj.Up2Date
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.exe
S:\Source\GLORIA\Unimarc\unimarc\UniMarc\obj\Debug\UniMarc.pdb

View File

@@ -2,6 +2,7 @@
<packages>
<package id="AngleSharp" version="1.0.4" targetFramework="net472" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net472" />
<package id="Microsoft.Web.WebView2" version="1.0.3351.48" targetFramework="net472" />
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
<package id="Selenium.Support" version="4.16.2" targetFramework="net472" />

View File

@@ -190,7 +190,7 @@ namespace WindowsFormsApp1.Delivery
dc.lbl_ID.Text = dataGridView1.Rows[idx].Cells["DLS_ID"].Value.ToString();
dc.lbl_PW.Text = dataGridView1.Rows[idx].Cells["DLS_PW"].Value.ToString();
dc.lbl_Area.Text = dataGridView1.Rows[idx].Cells["DLS_Area"].Value.ToString();
dc.SetArea(dataGridView1.Rows[idx].Cells["DLS_Area"].Value.ToString(), true);
//dc.SetArea(dataGridView1.Rows[idx].Cells["DLS_Area"].Value.ToString(), true);
}
if (sl != null) {
sl.tb_SearchClient.Text = value;

View File

@@ -33,6 +33,9 @@
this.panel1 = new System.Windows.Forms.Panel();
this.panel8 = new System.Windows.Forms.Panel();
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.Book_name = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ISBN = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Check = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.panel5 = new System.Windows.Forms.Panel();
this.chk_RemoveBrit = new System.Windows.Forms.CheckBox();
this.chk_spChar = new System.Windows.Forms.CheckBox();
@@ -41,6 +44,7 @@
this.btn_Reflesh008 = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.rBtn_ISBN = new System.Windows.Forms.RadioButton();
this.btnStop = new System.Windows.Forms.Button();
this.btn_Search = new System.Windows.Forms.Button();
this.rBtn_BookName = new System.Windows.Forms.RadioButton();
this.panel2 = new System.Windows.Forms.Panel();
@@ -53,15 +57,12 @@
this.btn_Close = new System.Windows.Forms.Button();
this.panel4 = new System.Windows.Forms.Panel();
this.panel7 = new System.Windows.Forms.Panel();
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
this.webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
this.panel6 = new System.Windows.Forms.Panel();
this.btn_Back = new System.Windows.Forms.Button();
this.btn_Forward = new System.Windows.Forms.Button();
this.tb_URL = new System.Windows.Forms.TextBox();
this.btnStop = new System.Windows.Forms.Button();
this.Book_name = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ISBN = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Check = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.panel1.SuspendLayout();
this.panel8.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
@@ -70,6 +71,7 @@
this.panel2.SuspendLayout();
this.panel4.SuspendLayout();
this.panel7.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.webView21)).BeginInit();
this.panel6.SuspendLayout();
this.SuspendLayout();
//
@@ -97,6 +99,7 @@
//
// panel8
//
this.panel8.Controls.Add(this.statusStrip1);
this.panel8.Controls.Add(this.dataGridView1);
this.panel8.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel8.Location = new System.Drawing.Point(0, 103);
@@ -123,6 +126,25 @@
this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown);
//
// Book_name
//
this.Book_name.HeaderText = "도서명";
this.Book_name.Name = "Book_name";
this.Book_name.Width = 140;
//
// ISBN
//
this.ISBN.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
this.ISBN.HeaderText = "ISBN";
this.ISBN.Name = "ISBN";
this.ISBN.Width = 140;
//
// Check
//
this.Check.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Check.HeaderText = "Y/N";
this.Check.Name = "Check";
//
// panel5
//
this.panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -213,6 +235,16 @@
this.rBtn_ISBN.Text = "ISBN";
this.rBtn_ISBN.UseVisualStyleBackColor = true;
//
// btnStop
//
this.btnStop.Location = new System.Drawing.Point(283, 5);
this.btnStop.Name = "btnStop";
this.btnStop.Size = new System.Drawing.Size(65, 23);
this.btnStop.TabIndex = 2;
this.btnStop.Text = "중 지";
this.btnStop.UseVisualStyleBackColor = true;
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// btn_Search
//
this.btn_Search.Location = new System.Drawing.Point(217, 5);
@@ -326,23 +358,24 @@
//
// panel7
//
this.panel7.Controls.Add(this.webBrowser1);
this.panel7.Controls.Add(this.webView21);
this.panel7.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel7.Location = new System.Drawing.Point(0, 35);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(929, 697);
this.panel7.TabIndex = 7;
//
// webBrowser1
// webView21
//
this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
this.webBrowser1.Location = new System.Drawing.Point(0, 0);
this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser1.Name = "webBrowser1";
this.webBrowser1.ScriptErrorsSuppressed = true;
this.webBrowser1.Size = new System.Drawing.Size(929, 697);
this.webBrowser1.TabIndex = 5;
this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
this.webView21.AllowExternalDrop = true;
this.webView21.CreationProperties = null;
this.webView21.DefaultBackgroundColor = System.Drawing.Color.White;
this.webView21.Dock = System.Windows.Forms.DockStyle.Fill;
this.webView21.Location = new System.Drawing.Point(0, 0);
this.webView21.Name = "webView21";
this.webView21.Size = new System.Drawing.Size(929, 697);
this.webView21.TabIndex = 5;
this.webView21.ZoomFactor = 1D;
//
// panel6
//
@@ -387,34 +420,13 @@
this.tb_URL.TabIndex = 0;
this.tb_URL.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tb_URL_KeyDown);
//
// btnStop
// statusStrip1
//
this.btnStop.Location = new System.Drawing.Point(283, 5);
this.btnStop.Name = "btnStop";
this.btnStop.Size = new System.Drawing.Size(65, 23);
this.btnStop.TabIndex = 2;
this.btnStop.Text = "중 지";
this.btnStop.UseVisualStyleBackColor = true;
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// Book_name
//
this.Book_name.HeaderText = "도서명";
this.Book_name.Name = "Book_name";
this.Book_name.Width = 140;
//
// ISBN
//
this.ISBN.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
this.ISBN.HeaderText = "ISBN";
this.ISBN.Name = "ISBN";
this.ISBN.Width = 140;
//
// Check
//
this.Check.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.Check.HeaderText = "Y/N";
this.Check.Name = "Check";
this.statusStrip1.Location = new System.Drawing.Point(0, 607);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(395, 22);
this.statusStrip1.TabIndex = 1;
this.statusStrip1.Text = "statusStrip1";
//
// DLS_Copy
//
@@ -428,6 +440,7 @@
this.Load += new System.EventHandler(this.DLS_Copy_Load);
this.panel1.ResumeLayout(false);
this.panel8.ResumeLayout(false);
this.panel8.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.panel5.ResumeLayout(false);
this.panel5.PerformLayout();
@@ -437,6 +450,7 @@
this.panel2.PerformLayout();
this.panel4.ResumeLayout(false);
this.panel7.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.webView21)).EndInit();
this.panel6.ResumeLayout(false);
this.panel6.PerformLayout();
this.ResumeLayout(false);
@@ -461,7 +475,7 @@
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button btn_Search;
public System.Windows.Forms.Label lbl_Area;
private System.Windows.Forms.WebBrowser webBrowser1;
private Microsoft.Web.WebView2.WinForms.WebView2 webView21;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Panel panel6;
private System.Windows.Forms.TextBox tb_URL;
@@ -478,5 +492,6 @@
private System.Windows.Forms.DataGridViewTextBoxColumn ISBN;
private System.Windows.Forms.DataGridViewTextBoxColumn Check;
private System.Windows.Forms.Button btnStop;
private System.Windows.Forms.StatusStrip statusStrip1;
}
}

View File

@@ -7,6 +7,8 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
namespace WindowsFormsApp1.Mac
{
@@ -28,9 +30,39 @@ namespace WindowsFormsApp1.Mac
//변경된 홈페이지: https://dls.edunet.net/DLS/totalLoginMain 사용 ID / 비번 : t5191774 / tb5191774
}
private void DLS_Copy_Load(object sender, EventArgs e)
private async void DLS_Copy_Load(object sender, EventArgs e)
{
webBrowser1.Navigate(url);
try
{
compidx = main.com_idx;
this.Show();
Application.DoEvents();
// WebView2 환경 준비 (Fixed Version 지원)
var environment = await WebView2Installer.GetWebView2EnvironmentAsync();
await webView21.EnsureCoreWebView2Async(environment);
webView21.CoreWebView2.NavigationCompleted += WebView21_NavigationCompleted;
webView21.CoreWebView2.Navigate(url);
}
catch (Exception ex)
{
MessageBox.Show(
$"WebView2 초기화 중 오류가 발생했습니다: {ex.Message}\n\n" +
"웹 기능이 필요하면 나중에 다시 시도해 주세요.",
"WebView2 초기화 오류",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
// webView2 숨기고 오류 상태 표시
webView21.Visible = false;
}
}
private void WebView21_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
{
tb_URL.Text = webView21.CoreWebView2.Source;
}
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
@@ -63,7 +95,7 @@ namespace WindowsFormsApp1.Mac
}
#endregion
private void btn_Connect_Click(object sender, EventArgs e)
private async void btn_Connect_Click(object sender, EventArgs e)
{
if (lbl_Client.Text == "Client")
{
@@ -76,38 +108,43 @@ namespace WindowsFormsApp1.Mac
return;
}
string url = webBrowser1.Url.AbsoluteUri;
string url = webView21.CoreWebView2.Source;
webBrowser1.Document.GetElementById("headerLoginBtn").InvokeMember("click");
//await webView21.CoreWebView2.ExecuteScriptAsync("document.getElementById('headerLoginBtn').click();");
Delay(5000);
await Task.Delay(1000);
DLS_Login(url);
await DLS_Login(url);
}
#region Connect_SUB
private void DLS_Login(string url)
private async Task DLS_Login(string url)
{
if (lbl_ID.Text == "" || lbl_PW.Text == "")
{
MessageBox.Show("ID 혹은 PW가 없습니다.");
return;
}
string ID = lbl_ID.Text, PW = lbl_PW.Text;
url = webBrowser1.Document.GetElementById(SetArea(lbl_Area.Text)).GetAttribute("value");
string ID = lbl_ID.Text.Trim(), PW = lbl_PW.Text.Trim();
//string elementValue = await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('{await SetArea(lbl_Area.Text)}').value;");
//url = elementValue.Trim('"');
webBrowser1.Document.GetElementById("s_id").SetAttribute("value", ID);
webBrowser1.Document.GetElementById("s_pwd").SetAttribute("value", PW);
//id설정
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('lgID').value = '{ID}';");
webBrowser1.Document.GetElementById("s_login").InvokeMember("click");
//pw 설정
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('lgPW').value = '{PW}';");
Delay(4000);
webBrowser1.Navigate(url + "/r/dls_new/bookInfo/collectionFormMA.jsp");
//로그인버튼 클릭
await webView21.CoreWebView2.ExecuteScriptAsync("document.getElementById('loginBtn').click();");
await Task.Delay(4000);
webView21.CoreWebView2.Navigate("https://dls1.edunet.net/DLS/bookMng/bookMain");
}
#endregion
private bool tStop = false;
private int tSearchIDX = 0;
private void btn_Search_Click(object sender, EventArgs e)
private async void btn_Search_Click(object sender, EventArgs e)
{
tStop = false;
if (dataGridView1.Rows[0].Cells["ISBN"].Value == null && rBtn_ISBN.Checked)
@@ -120,16 +157,16 @@ namespace WindowsFormsApp1.Mac
MessageBox.Show("도서명이 입력되지않았습니다!");
return;
}
if (!SearchCopy(rBtn_ISBN.Checked))
if (!await SearchCopy(rBtn_ISBN.Checked))
return;
MessageBox.Show("완료되었습니다.");
}
#region SearchClick_Sub
private bool SearchCopy(bool isISBN)
private async Task<bool> SearchCopy(bool isISBN)
{
if (!webBrowser1.Url.AbsoluteUri.Contains("collectionFormMA"))
if (!webView21.CoreWebView2.Source.Contains("collectionFormMA"))
{
MessageBox.Show("자료관리 창이 아닙니다!");
return false;
@@ -144,12 +181,12 @@ namespace WindowsFormsApp1.Mac
if (isISBN)
{
string Target = dataGridView1.Rows[a].Cells["ISBN"].Value.ToString();
Check = SearchISBN(Target);
Check = await SearchISBN(Target);
}
else
{
string Target = dataGridView1.Rows[a].Cells["Book_name"].Value.ToString();
Check = SearchName(Target);
Check = await SearchName(Target);
}
if (Check == "0")
Check = "";
@@ -173,34 +210,15 @@ namespace WindowsFormsApp1.Mac
/// </summary>
/// <param name="Target">도서명</param>
/// <param name="row">행 번호</param>
private string SearchName(string Target)
private async Task<string> SearchName(string Target)
{
HtmlElementCollection search = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement Search in search)
{
if (Search.Id == "bib1")
Search.SetAttribute("value", Target);
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('bib1').value = '{Target.Replace("'", "\\'")}';");
await webView21.CoreWebView2.ExecuteScriptAsync("document.querySelector('.button_search').click();");
await Task.Delay(5000);
if (Search.GetAttribute("className") == "button_search")
Search.InvokeMember("click");
}
Delay(5000);
string InnerText = "";
HtmlElementCollection paging_nav = webBrowser1.Document.GetElementsByTagName("div");
foreach (HtmlElement div in paging_nav)
{
if (div.GetAttribute("className") == "paging_nav")
{
HtmlElementCollection span = div.GetElementsByTagName("span");
foreach (HtmlElement count in span)
{
InnerText = count.InnerText;
break;
}
}
}
string script = "(() => { const div = document.querySelector('.paging_nav'); return div ? div.querySelector('span')?.innerText || '' : ''; })()";
string InnerText = await webView21.CoreWebView2.ExecuteScriptAsync(script);
InnerText = InnerText.Trim('"');
return InnerText;
}
@@ -209,41 +227,16 @@ namespace WindowsFormsApp1.Mac
/// </summary>
/// <param name="Target">ISBN</param>
/// <param name="row">행 번호</param>
private string SearchISBN(string Target)
private async Task<string> SearchISBN(string Target)
{
HtmlElementCollection combo = webBrowser1.Document.GetElementsByTagName("select");
foreach (HtmlElement Search in combo)
{
if (Search.Id == "bibKind2")
Search.SetAttribute("selectedIndex", "2");
}
await webView21.CoreWebView2.ExecuteScriptAsync("document.getElementById('bibKind2').selectedIndex = 2;");
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('bib2').value = '{Target}';");
await webView21.CoreWebView2.ExecuteScriptAsync("document.querySelector('.button_search').click();");
await Task.Delay(5000);
HtmlElementCollection search = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement Search in search)
{
if (Search.Id == "bib2")
Search.SetAttribute("value", Target);
if (Search.GetAttribute("className") == "button_search")
Search.InvokeMember("click");
}
Delay(5000);
string InnerText = "";
HtmlElementCollection paging_nav = webBrowser1.Document.GetElementsByTagName("div");
foreach (HtmlElement div in paging_nav)
{
if (div.GetAttribute("className") == "paging_nav")
{
HtmlElementCollection span = div.GetElementsByTagName("span");
foreach (HtmlElement count in span)
{
InnerText = count.InnerText;
break;
}
}
}
string script = "(() => { const div = document.querySelector('.paging_nav'); return div ? div.querySelector('span')?.innerText || '' : ''; })()";
string InnerText = await webView21.CoreWebView2.ExecuteScriptAsync(script);
InnerText = InnerText.Trim('"');
return InnerText;
}
@@ -253,7 +246,7 @@ namespace WindowsFormsApp1.Mac
/// DLS지역 코드 변환
/// </summary>
/// <returns>코드</returns>
public string SetArea(string dlsArea, bool move = false)
public async Task<string> SetArea(string dlsArea, bool move = false)
{
string[] Area = {
"서울", "부산", "대구", "인천", "광주",
@@ -282,7 +275,9 @@ namespace WindowsFormsApp1.Mac
{
try
{
webBrowser1.Navigate(webBrowser1.Document.GetElementById(Code[idx]).GetAttribute("value"));
string elementValue = await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('{Code[idx]}').value;");
elementValue = elementValue.Trim('"');
webView21.CoreWebView2.Navigate(elementValue);
}
catch (Exception ex)
{
@@ -318,17 +313,14 @@ namespace WindowsFormsApp1.Mac
private void btn_Back_Click(object sender, EventArgs e)
{
webBrowser1.GoBack();
if (webView21.CoreWebView2.CanGoBack)
webView21.CoreWebView2.GoBack();
}
private void btn_Forward_Click(object sender, EventArgs e)
{
webBrowser1.GoForward();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
tb_URL.Text = webBrowser1.Url.AbsoluteUri;
if (webView21.CoreWebView2.CanGoForward)
webView21.CoreWebView2.GoForward();
}
private void tb_URL_KeyDown(object sender, KeyEventArgs e)
@@ -336,7 +328,7 @@ namespace WindowsFormsApp1.Mac
if (e.KeyCode == Keys.Enter)
{
string url = tb_URL.Text;
webBrowser1.Navigate(url);
webView21.CoreWebView2.Navigate(url);
}
}

View File

@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="Book_name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@@ -132,37 +135,38 @@
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
P87mU+ZvyRQDAAAAAElFTkSuQmCC
</value>
</data>
</root>