Compare commits
2 Commits
3d75d1192d
...
7ca6712e29
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ca6712e29 | |||
| 2f1c2483f0 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,7 +3,6 @@
|
|||||||
## 다음과 같은 확장자는 전체 무시
|
## 다음과 같은 확장자는 전체 무시
|
||||||
.vs
|
.vs
|
||||||
bin
|
bin
|
||||||
debug
|
|
||||||
obj
|
obj
|
||||||
packages
|
packages
|
||||||
*.pub
|
*.pub
|
||||||
@@ -35,5 +34,3 @@ GolfTicketing/
|
|||||||
/unimarc/UniMarc/obj
|
/unimarc/UniMarc/obj
|
||||||
/unimarc/UniMarc/.vs
|
/unimarc/UniMarc/.vs
|
||||||
/unimarc/UniMarc/bin
|
/unimarc/UniMarc/bin
|
||||||
obj
|
|
||||||
bin
|
|
||||||
@@ -15,5 +15,11 @@
|
|||||||
"name": "UniMarc",
|
"name": "UniMarc",
|
||||||
"type": "도서관 자료 관리 시스템",
|
"type": "도서관 자료 관리 시스템",
|
||||||
"tech_stack": "C# WinForms, .NET Framework 4.7.2, MySQL"
|
"tech_stack": "C# WinForms, .NET Framework 4.7.2, MySQL"
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"WebFetch(domain:lib.namgu.gwangju.kr)"
|
||||||
|
],
|
||||||
|
"deny": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,3 @@ F:\(VHD) Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\msbuild.
|
|||||||
|
|
||||||
## 프로젝트 파일명
|
## 프로젝트 파일명
|
||||||
UniMarc.csproj
|
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
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
# 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 버전 충돌 해결
|
|
||||||
@@ -9,12 +9,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Factory_Client", "Factory_C
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "UniMarcSetup", "UniMarcSetup\UniMarcSetup.vdproj", "{B0A88F76-DC68-44F9-90B4-CD94625CC1F4}"
|
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "UniMarcSetup", "UniMarcSetup\UniMarcSetup.vdproj", "{B0A88F76-DC68-44F9-90B4-CD94625CC1F4}"
|
||||||
EndProject
|
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
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"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
23
unimarc/unimarc/.vscode/launch.json
vendored
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"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
3
unimarc/unimarc/.vscode/settings.json
vendored
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"dotnet.preferCSharpExtension": true
|
|
||||||
}
|
|
||||||
50
unimarc/unimarc/.vscode/tasks.json
vendored
50
unimarc/unimarc/.vscode/tasks.json
vendored
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="Renci.SshNet" publicKeyToken="1cee9f8bde3db106" culture="neutral" />
|
<assemblyIdentity name="Renci.SshNet" publicKeyToken="1cee9f8bde3db106" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-2020.0.1.0" newVersion="2020.0.1.0" />
|
<bindingRedirect oldVersion="0.0.0.0-2025.0.0.1" newVersion="2025.0.0.1" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
@@ -44,6 +44,14 @@
|
|||||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.5" newVersion="8.0.0.5" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="AngleSharp" publicKeyToken="e83494dcdc6d31ea" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
<userSettings>
|
<userSettings>
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace UniMarc
|
|
||||||
{
|
|
||||||
public static class CUtill
|
|
||||||
{
|
|
||||||
public static arUtil.Log mLog;
|
|
||||||
|
|
||||||
public static void MsgI(string m)
|
|
||||||
{
|
|
||||||
//MessageWindow.VisibleAll(false);
|
|
||||||
MessageBox.Show(m, "CHECK", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
||||||
//MessageWindow.VisibleAll(true);
|
|
||||||
}
|
|
||||||
public static void MsgE(string m)
|
|
||||||
{
|
|
||||||
//MessageWindow.VisibleAll(false);
|
|
||||||
MessageBox.Show(m, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
||||||
//MessageWindow.VisibleAll(true);
|
|
||||||
}
|
|
||||||
public static DialogResult MsgQ(string m)
|
|
||||||
{
|
|
||||||
//MessageWindow.VisibleAll(false);
|
|
||||||
DialogResult dlg = MessageBox.Show(m, "CHECK", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
|
||||||
//MessageWindow.VisibleAll(true);
|
|
||||||
return dlg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -41,35 +41,23 @@ namespace WindowsFormsApp1
|
|||||||
public Main()
|
public Main()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
PUB.Init();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string User_Name { get; internal set; }
|
public string User_Name { get; internal set; }
|
||||||
|
|
||||||
private void Main_Load(object sender, EventArgs e)
|
private void Main_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.Visible = false; // 메인폼을 먼저 숨김
|
this.Visible = false; // 메인폼을 먼저 숨김
|
||||||
|
|
||||||
#region "Log setting"
|
|
||||||
var logsubdir = "{yyyy|MM|dd}";
|
|
||||||
string tPath = string.Format("{0}\\LOG", AppDomain.CurrentDomain.BaseDirectory).Replace("\\\\", "\\"); ;
|
|
||||||
CUtill.mLog = new arUtil.Log(tPath);
|
|
||||||
CUtill.mLog.SubDirectory = logsubdir;
|
|
||||||
CUtill.mLog.FileNameFormat = "{yyMMdd}";
|
|
||||||
#endregion
|
|
||||||
login login = new login();
|
login login = new login();
|
||||||
VersionText.Text = string.Format("UniMarc Ver.{0}", ip.VersionInfo());
|
VersionText.Text = string.Format("UniMarc Ver.{0}", ip.VersionInfo());
|
||||||
|
|
||||||
if (DialogResult.OK == login.ShowDialog(this))
|
if (DialogResult.OK == login.ShowDialog(this)) {
|
||||||
{
|
|
||||||
this.Visible = true;
|
this.Visible = true;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
this.Close();
|
this.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,15 +277,13 @@ namespace WindowsFormsApp1
|
|||||||
bool IsText = false;
|
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;
|
IsText = true;
|
||||||
count[1] = b;
|
count[1] = b;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (IsText)
|
if (IsText) {
|
||||||
{
|
|
||||||
count[0] = a;
|
count[0] = a;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -309,8 +295,7 @@ namespace WindowsFormsApp1
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// 권한설정으로 인한 리턴
|
// 권한설정으로 인한 리턴
|
||||||
if (!MenuCheckT[count[0]][count[1]].Enabled)
|
if (!MenuCheckT[count[0]][count[1]].Enabled) {
|
||||||
{
|
|
||||||
MessageBox.Show("권한이 설정되지 않았습니다!");
|
MessageBox.Show("권한이 설정되지 않았습니다!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1197,7 +1182,7 @@ namespace WindowsFormsApp1
|
|||||||
DLS_school_Lookup.Show();
|
DLS_school_Lookup.Show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async private void dLS복본조사ToolStripMenuItem_Click(object sender, EventArgs e)
|
private void dLS복본조사ToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (Mac_dLS_Copy != null)
|
if (Mac_dLS_Copy != null)
|
||||||
{
|
{
|
||||||
@@ -1205,11 +1190,9 @@ namespace WindowsFormsApp1
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var environment = await WebView2Installer.GetWebView2EnvironmentAsync();
|
|
||||||
|
|
||||||
Mac_dLS_Copy = new DLS_Copy(this);
|
Mac_dLS_Copy = new DLS_Copy(this);
|
||||||
Mac_dLS_Copy.MdiParent = this;
|
Mac_dLS_Copy.MdiParent = this;
|
||||||
Mac_dLS_Copy.WindowState = FormWindowState.Maximized;
|
//Mac_dLS_Copy.WindowState = FormWindowState.Maximized;
|
||||||
Mac_dLS_Copy.FormClosed += (o, ea) => Mac_dLS_Copy = null;
|
Mac_dLS_Copy.FormClosed += (o, ea) => Mac_dLS_Copy = null;
|
||||||
Mac_dLS_Copy.Show();
|
Mac_dLS_Copy.Show();
|
||||||
}
|
}
|
||||||
|
|||||||
26
unimarc/unimarc/PUB.cs
Normal file
26
unimarc/unimarc/PUB.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace UniMarc
|
||||||
|
{
|
||||||
|
public static class PUB
|
||||||
|
{
|
||||||
|
public static arUtil.Log log;
|
||||||
|
|
||||||
|
public static void Init()
|
||||||
|
{
|
||||||
|
#region "Log setting"
|
||||||
|
var logsubdir = "{yyyy|MM|dd}";
|
||||||
|
string tPath = string.Format("{0}\\LOG", AppDomain.CurrentDomain.BaseDirectory).Replace("\\\\", "\\"); ;
|
||||||
|
PUB.log = new arUtil.Log(tPath);
|
||||||
|
PUB.log.SubDirectory = logsubdir;
|
||||||
|
PUB.log.FileNameFormat = "{yyMMdd}";
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,20 +26,6 @@ namespace BokBonCheck
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<BookSearchResult>> SearchBooksAsync(string searchTerm)
|
|
||||||
{
|
|
||||||
var results = new List<BookSearchResult>();
|
|
||||||
|
|
||||||
foreach (var searcher in _searchers)
|
|
||||||
{
|
|
||||||
searcher.StartDriver();
|
|
||||||
var result = await searcher.SearchAsync(searchTerm);
|
|
||||||
results.Add(result);
|
|
||||||
//searcher.StopDriver();
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Return Searcher
|
/// Return Searcher
|
||||||
|
|||||||
@@ -8,17 +8,60 @@ using System.Reflection;
|
|||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Principal;
|
||||||
|
using OpenQA.Selenium;
|
||||||
|
using OpenQA.Selenium.Chrome;
|
||||||
|
|
||||||
namespace BokBonCheck
|
namespace BokBonCheck
|
||||||
{
|
{
|
||||||
public static class ChromeDriverManager
|
public static class ChromeDriverManager
|
||||||
{
|
{
|
||||||
private static string _driverPath = null;
|
private static string _driverPath = null;
|
||||||
|
private static readonly object _lockObject = new object();
|
||||||
|
private static readonly int MaxRetryCount = 3;
|
||||||
|
private static readonly int RetryDelayMs = 2000;
|
||||||
|
private static readonly string UserDataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ChromeDriverUserData");
|
||||||
|
|
||||||
public static async Task<string> SetupChromeDriverAsync(DownloadProgressForm progressForm = null)
|
public static async Task<string> SetupChromeDriverAsync(DownloadProgressForm progressForm = null)
|
||||||
{
|
{
|
||||||
|
lock (_lockObject)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(_driverPath) && File.Exists(_driverPath))
|
||||||
|
{
|
||||||
|
// 이미 설정된 드라이버가 있고 정상 동작하면 재사용
|
||||||
|
if (IsDriverReady())
|
||||||
|
{
|
||||||
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.UpdateProgress(100, "기존 드라이버 사용");
|
||||||
|
progressForm.SetCompleted("기존 드라이버를 사용합니다.");
|
||||||
|
}
|
||||||
|
return _driverPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Chrome 설치 여부 확인
|
||||||
|
if (!IsChromeInstalled())
|
||||||
|
{
|
||||||
|
var errorMsg = "Chrome이 설치되어 있지 않습니다. Chrome을 설치한 후 다시 시도해주세요.";
|
||||||
|
Console.WriteLine(errorMsg);
|
||||||
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.SetError(errorMsg);
|
||||||
|
}
|
||||||
|
throw new InvalidOperationException(errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 사용자 데이터 디렉토리 생성
|
||||||
|
EnsureUserDataDirectory();
|
||||||
|
|
||||||
|
// 사용자 디렉토리 생성 후 기존 Chrome/ChromeDriver 프로세스 정리
|
||||||
|
CleanupChromeProcesses();
|
||||||
|
|
||||||
// Chrome 버전 확인
|
// Chrome 버전 확인
|
||||||
var chromeVersion = GetChromeVersion();
|
var chromeVersion = GetChromeVersion();
|
||||||
Console.WriteLine($"설치된 Chrome 버전: {chromeVersion}");
|
Console.WriteLine($"설치된 Chrome 버전: {chromeVersion}");
|
||||||
@@ -34,7 +77,12 @@ namespace BokBonCheck
|
|||||||
{
|
{
|
||||||
Console.WriteLine($"기존 드라이버 발견: {existingDriverPath}");
|
Console.WriteLine($"기존 드라이버 발견: {existingDriverPath}");
|
||||||
|
|
||||||
// 기존 드라이버 테스트
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.UpdateProgress(20, "기존 드라이버 테스트 중...");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 기존 드라이버 테스트 (한 번만)
|
||||||
if (await TestExistingDriver(existingDriverPath))
|
if (await TestExistingDriver(existingDriverPath))
|
||||||
{
|
{
|
||||||
if (progressForm != null)
|
if (progressForm != null)
|
||||||
@@ -43,14 +91,17 @@ namespace BokBonCheck
|
|||||||
progressForm.SetCompleted("기존 드라이버를 사용합니다.");
|
progressForm.SetCompleted("기존 드라이버를 사용합니다.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lock (_lockObject)
|
||||||
|
{
|
||||||
_driverPath = existingDriverPath;
|
_driverPath = existingDriverPath;
|
||||||
Environment.SetEnvironmentVariable("webdriver.chrome.driver", existingDriverPath);
|
Environment.SetEnvironmentVariable("webdriver.chrome.driver", existingDriverPath);
|
||||||
|
}
|
||||||
return existingDriverPath;
|
return existingDriverPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("기존 드라이버 테스트 실패 - 새로 다운로드");
|
Console.WriteLine("기존 드라이버 테스트 실패 - 새로 다운로드");
|
||||||
// 기존 드라이버가 작동하지 않으면 삭제
|
// 기존 드라이버 삭제
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
File.Delete(existingDriverPath);
|
File.Delete(existingDriverPath);
|
||||||
@@ -63,25 +114,31 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 드라이버 다운로드
|
||||||
if (progressForm != null)
|
if (progressForm != null)
|
||||||
{
|
{
|
||||||
progressForm.UpdateProgress(30, "Chrome 버전에 맞는 드라이버 다운로드 중...");
|
progressForm.UpdateProgress(30, "Chrome 드라이버 다운로드 중...");
|
||||||
|
}
|
||||||
|
var driverPath = await DownloadChromeDriverWithRetryAsync(progressForm);
|
||||||
|
|
||||||
|
// 다운로드된 드라이버 테스트 (한 번만)
|
||||||
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.UpdateProgress(80, "다운로드된 드라이버 테스트 중...");
|
||||||
}
|
}
|
||||||
|
|
||||||
// WebDriverManager를 사용하여 설치된 Chrome 버전에 맞는 드라이버 다운로드
|
if (await TestExistingDriver(driverPath))
|
||||||
var driverManager = new DriverManager();
|
{
|
||||||
var driverPath = driverManager.SetUpDriver(new ChromeConfig(), "MatchingBrowser");
|
lock (_lockObject)
|
||||||
|
{
|
||||||
// 다운로드된 드라이버 경로 저장
|
|
||||||
_driverPath = driverPath;
|
_driverPath = driverPath;
|
||||||
|
|
||||||
// 환경 변수 설정
|
|
||||||
Environment.SetEnvironmentVariable("webdriver.chrome.driver", driverPath);
|
Environment.SetEnvironmentVariable("webdriver.chrome.driver", driverPath);
|
||||||
|
}
|
||||||
|
|
||||||
if (progressForm != null)
|
if (progressForm != null)
|
||||||
{
|
{
|
||||||
progressForm.UpdateProgress(100, "드라이버 다운로드 완료");
|
progressForm.UpdateProgress(100, "드라이버 설정 완료");
|
||||||
progressForm.SetCompleted("드라이버 다운로드 완료!");
|
progressForm.SetCompleted("드라이버 설정 완료!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine($"ChromeDriver 경로: {driverPath}");
|
Console.WriteLine($"ChromeDriver 경로: {driverPath}");
|
||||||
@@ -89,17 +146,105 @@ namespace BokBonCheck
|
|||||||
|
|
||||||
return driverPath;
|
return driverPath;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("다운로드된 드라이버 테스트에 실패했습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"ChromeDriver 설정 오류: {ex.Message}");
|
var errorMsg = $"ChromeDriver 설정 오류: {ex.Message}";
|
||||||
|
Console.WriteLine(errorMsg);
|
||||||
if (progressForm != null)
|
if (progressForm != null)
|
||||||
{
|
{
|
||||||
progressForm.SetError($"설정 오류: {ex.Message}");
|
progressForm.SetError(errorMsg);
|
||||||
}
|
}
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void EnsureUserDataDirectory()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(UserDataDir))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(UserDataDir);
|
||||||
|
Console.WriteLine($"사용자 데이터 디렉토리 생성: {UserDataDir}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 임시 파일 디렉토리도 생성
|
||||||
|
var tempDir = Path.Combine(UserDataDir, "temp");
|
||||||
|
if (!Directory.Exists(tempDir))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(tempDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 로그 디렉토리 생성
|
||||||
|
var logDir = Path.Combine(UserDataDir, "logs");
|
||||||
|
if (!Directory.Exists(logDir))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(logDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"사용자 데이터 디렉토리 생성 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<string> DownloadChromeDriverWithRetryAsync(DownloadProgressForm progressForm)
|
||||||
|
{
|
||||||
|
Exception lastException = null;
|
||||||
|
|
||||||
|
for (int attempt = 1; attempt <= MaxRetryCount; attempt++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.UpdateProgress(30 + (attempt - 1) * 10,
|
||||||
|
$"Chrome 드라이버 다운로드 중... (시도 {attempt}/{MaxRetryCount})");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"드라이버 다운로드 시도 {attempt}/{MaxRetryCount}");
|
||||||
|
|
||||||
|
// WebDriverManager를 사용하여 설치된 Chrome 버전에 맞는 드라이버 다운로드
|
||||||
|
var driverManager = new DriverManager();
|
||||||
|
var driverPath = driverManager.SetUpDriver(new ChromeConfig(), "MatchingBrowser");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(driverPath) && File.Exists(driverPath))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"드라이버 다운로드 성공: {driverPath}");
|
||||||
|
return driverPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("드라이버 파일을 찾을 수 없습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
lastException = ex;
|
||||||
|
Console.WriteLine($"드라이버 다운로드 시도 {attempt} 실패: {ex.Message}");
|
||||||
|
|
||||||
|
if (attempt < MaxRetryCount)
|
||||||
|
{
|
||||||
|
if (progressForm != null)
|
||||||
|
{
|
||||||
|
progressForm.UpdateProgress(30 + attempt * 10,
|
||||||
|
$"다운로드 실패. 재시도 중... ({attempt + 1}/{MaxRetryCount})");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 재시도 전 잠시 대기
|
||||||
|
await Task.Delay(RetryDelayMs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidOperationException($"드라이버 다운로드를 {MaxRetryCount}번 시도했지만 실패했습니다. 마지막 오류: {lastException?.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetExistingDriverPath()
|
private static string GetExistingDriverPath()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -111,25 +256,45 @@ namespace BokBonCheck
|
|||||||
return envPath;
|
return envPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 사용자 디렉토리에서 확인 (관리자 권한 없이도 접근 가능)
|
||||||
|
var userDriverPath = Path.Combine(UserDataDir, "chromedriver.exe");
|
||||||
|
if (File.Exists(userDriverPath))
|
||||||
|
{
|
||||||
|
return userDriverPath;
|
||||||
|
}
|
||||||
|
|
||||||
// WebDriverManager 캐시 폴더에서 확인
|
// WebDriverManager 캐시 폴더에서 확인
|
||||||
var cachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
var cachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||||
".cache", "selenium");
|
".cache", "selenium");
|
||||||
if (Directory.Exists(cachePath))
|
if (Directory.Exists(cachePath))
|
||||||
{
|
{
|
||||||
var chromeDriverFiles = Directory.GetFiles(cachePath, "chromedriver*", SearchOption.AllDirectories);
|
var chromeDriverFiles = Directory.GetFiles(cachePath, "chromedriver*", SearchOption.AllDirectories)
|
||||||
foreach (var file in chromeDriverFiles)
|
.Where(f => f.EndsWith(".exe") || !Path.HasExtension(f))
|
||||||
|
.OrderByDescending(f => File.GetLastWriteTime(f))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
if (chromeDriverFiles.Length > 0)
|
||||||
{
|
{
|
||||||
if (file.EndsWith(".exe") || !Path.HasExtension(file))
|
return chromeDriverFiles[0]; // 가장 최근 파일 반환
|
||||||
{
|
|
||||||
return file;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 현재 실행 파일과 같은 디렉토리에서 확인
|
||||||
|
var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
|
if (!string.IsNullOrEmpty(currentDir))
|
||||||
|
{
|
||||||
|
var localDriverPath = Path.Combine(currentDir, "chromedriver.exe");
|
||||||
|
if (File.Exists(localDriverPath))
|
||||||
|
{
|
||||||
|
return localDriverPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine($"기존 드라이버 경로 확인 실패: {ex.Message}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,6 +314,10 @@ namespace BokBonCheck
|
|||||||
@"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
@"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
||||||
@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
|
@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
|
||||||
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||||
|
@"Google\Chrome\Application\chrome.exe"),
|
||||||
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
|
||||||
|
@"Google\Chrome\Application\chrome.exe"),
|
||||||
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
|
||||||
@"Google\Chrome\Application\chrome.exe")
|
@"Google\Chrome\Application\chrome.exe")
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -163,6 +332,27 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 레지스트리에서 확인 (추가 방법)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Google\Chrome\BLBeacon"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
var version = key.GetValue("version") as string;
|
||||||
|
if (!string.IsNullOrEmpty(version))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"레지스트리에서 Chrome 버전 감지: {version}");
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"레지스트리 확인 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
return "알 수 없음";
|
return "알 수 없음";
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -181,6 +371,10 @@ namespace BokBonCheck
|
|||||||
@"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
@"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
||||||
@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
|
@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
|
||||||
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||||
|
@"Google\Chrome\Application\chrome.exe"),
|
||||||
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
|
||||||
|
@"Google\Chrome\Application\chrome.exe"),
|
||||||
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
|
||||||
@"Google\Chrome\Application\chrome.exe")
|
@"Google\Chrome\Application\chrome.exe")
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -192,10 +386,27 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
// 레지스트리에서도 확인
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Google\Chrome\BLBeacon"))
|
||||||
|
{
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
// 레지스트리 접근 실패는 무시
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Chrome 설치 확인 실패: {ex.Message}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,32 +422,7 @@ namespace BokBonCheck
|
|||||||
progressForm.UpdateProgress(50, "드라이버 테스트 중...");
|
progressForm.UpdateProgress(50, "드라이버 테스트 중...");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChromeDriver 서비스 설정
|
return await TestExistingDriver(driverPath);
|
||||||
var service = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath));
|
|
||||||
service.HideCommandPromptWindow = true;
|
|
||||||
// 간단한 테스트 실행
|
|
||||||
var options = new OpenQA.Selenium.Chrome.ChromeOptions();
|
|
||||||
options.AddArgument("--headless");
|
|
||||||
options.AddArgument("--no-sandbox");
|
|
||||||
options.AddArgument("--disable-dev-shm-usage");
|
|
||||||
options.AddArgument("--disable-gpu");
|
|
||||||
options.AddArgument("--remote-debugging-port=0");
|
|
||||||
|
|
||||||
using (var driver = new OpenQA.Selenium.Chrome.ChromeDriver(service, options))
|
|
||||||
{
|
|
||||||
driver.Navigate().GoToUrl("https://www.google.com");
|
|
||||||
var title = driver.Title;
|
|
||||||
|
|
||||||
Console.WriteLine($"드라이버 테스트 성공: {title}");
|
|
||||||
|
|
||||||
if (progressForm != null)
|
|
||||||
{
|
|
||||||
progressForm.UpdateProgress(100, "드라이버 테스트 성공!");
|
|
||||||
progressForm.SetCompleted("드라이버 테스트 성공!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return !string.IsNullOrEmpty(title);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -255,6 +441,20 @@ namespace BokBonCheck
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Chrome 드라이버 캐시 정리 시작...");
|
Console.WriteLine("Chrome 드라이버 캐시 정리 시작...");
|
||||||
|
|
||||||
|
// 사용자 데이터 디렉토리 정리
|
||||||
|
if (Directory.Exists(UserDataDir))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.Delete(UserDataDir, true);
|
||||||
|
Console.WriteLine($"사용자 데이터 디렉토리 정리됨: {UserDataDir}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"사용자 데이터 디렉토리 정리 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WebDriverManager 캐시 폴더 정리
|
// WebDriverManager 캐시 폴더 정리
|
||||||
var cachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
var cachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||||
".cache", "selenium");
|
".cache", "selenium");
|
||||||
@@ -280,6 +480,8 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 저장된 드라이버 경로도 정리
|
// 저장된 드라이버 경로도 정리
|
||||||
|
lock (_lockObject)
|
||||||
|
{
|
||||||
if (!string.IsNullOrEmpty(_driverPath) && File.Exists(_driverPath))
|
if (!string.IsNullOrEmpty(_driverPath) && File.Exists(_driverPath))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -292,8 +494,9 @@ namespace BokBonCheck
|
|||||||
Console.WriteLine($"저장된 드라이버 삭제 실패: {ex.Message}");
|
Console.WriteLine($"저장된 드라이버 삭제 실패: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_driverPath = null;
|
_driverPath = null;
|
||||||
|
}
|
||||||
|
|
||||||
Environment.SetEnvironmentVariable("webdriver.chrome.driver", null);
|
Environment.SetEnvironmentVariable("webdriver.chrome.driver", null);
|
||||||
|
|
||||||
Console.WriteLine("Chrome 드라이버 캐시 정리 완료");
|
Console.WriteLine("Chrome 드라이버 캐시 정리 완료");
|
||||||
@@ -317,23 +520,23 @@ namespace BokBonCheck
|
|||||||
|
|
||||||
Console.WriteLine($"드라이버 준비 상태 확인: {driverPath}");
|
Console.WriteLine($"드라이버 준비 상태 확인: {driverPath}");
|
||||||
|
|
||||||
// 간단한 테스트 실행
|
// 파일 크기와 수정 날짜로 기본 검증
|
||||||
var service = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath));
|
var fileInfo = new FileInfo(driverPath);
|
||||||
service.HideCommandPromptWindow = true;
|
if (fileInfo.Length < 1000) // 1KB 미만이면 의심스러움
|
||||||
var options = new OpenQA.Selenium.Chrome.ChromeOptions();
|
|
||||||
options.AddArgument("--headless");
|
|
||||||
options.AddArgument("--no-sandbox");
|
|
||||||
options.AddArgument("--disable-dev-shm-usage");
|
|
||||||
options.AddArgument("--disable-gpu");
|
|
||||||
options.AddArgument("--remote-debugging-port=0");
|
|
||||||
|
|
||||||
using (var driver = new OpenQA.Selenium.Chrome.ChromeDriver(service, options))
|
|
||||||
{
|
{
|
||||||
driver.Navigate().GoToUrl("https://www.google.com");
|
Console.WriteLine("드라이버 파일이 너무 작습니다.");
|
||||||
var result = !string.IsNullOrEmpty(driver.Title);
|
return false;
|
||||||
Console.WriteLine($"드라이버 준비 상태: {(result ? "준비됨" : "실패")}");
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 최근 30일 내 파일인지 확인
|
||||||
|
if (fileInfo.LastWriteTime < DateTime.Now.AddDays(-30))
|
||||||
|
{
|
||||||
|
Console.WriteLine("드라이버 파일이 너무 오래되었습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("드라이버 준비 상태: 준비됨");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -342,26 +545,121 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 기본 Chrome 옵션을 생성하는 헬퍼 메서드
|
||||||
|
/// </summary>
|
||||||
|
public static ChromeOptions CreateBaseChromeOptions(bool hideBrowser = true,int width = 800,int height = 600)
|
||||||
|
{
|
||||||
|
var options = new ChromeOptions();
|
||||||
|
|
||||||
|
if (hideBrowser)
|
||||||
|
{
|
||||||
|
options.AddArgument("--headless");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(width > 0 && height > 0)
|
||||||
|
{
|
||||||
|
options.AddArgument($"--window-size={width},{height}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 기본 안정성 옵션
|
||||||
|
options.AddArgument("--no-sandbox");
|
||||||
|
options.AddArgument("--remote-debugging-port=0");
|
||||||
|
options.AddArgument("--disable-extensions");
|
||||||
|
options.AddArgument("--disable-plugins");
|
||||||
|
options.AddArgument("--disable-images");
|
||||||
|
options.AddArgument("--disable-javascript");
|
||||||
|
options.AddArgument("--disable-java");
|
||||||
|
options.AddArgument("--disable-flash");
|
||||||
|
options.AddArgument("--disable-web-security");
|
||||||
|
options.AddArgument("--allow-running-insecure-content");
|
||||||
|
|
||||||
|
// 메모리 및 성능 최적화
|
||||||
|
options.AddArgument("--memory-pressure-off");
|
||||||
|
options.AddArgument("--max_old_space_size=4096");
|
||||||
|
options.AddArgument("--disable-background-timer-throttling");
|
||||||
|
options.AddArgument("--disable-backgrounding-occluded-windows");
|
||||||
|
options.AddArgument("--disable-renderer-backgrounding");
|
||||||
|
options.AddArgument("--disable-features=TranslateUI");
|
||||||
|
options.AddArgument("--disable-ipc-flooding-protection");
|
||||||
|
options.AddArgument("--disable-default-apps");
|
||||||
|
options.AddArgument("--disable-sync");
|
||||||
|
options.AddArgument("--disable-translate");
|
||||||
|
options.AddArgument("--disable-logging");
|
||||||
|
options.AddArgument("--disable-notifications");
|
||||||
|
options.AddArgument("--disable-popup-blocking");
|
||||||
|
options.AddArgument("--disable-prompt-on-repost");
|
||||||
|
options.AddArgument("--disable-hang-monitor");
|
||||||
|
options.AddArgument("--disable-client-side-phishing-detection");
|
||||||
|
options.AddArgument("--disable-component-update");
|
||||||
|
options.AddArgument("--disable-domain-reliability");
|
||||||
|
|
||||||
|
// 프로세스 관련 안정성 옵션
|
||||||
|
options.AddArgument("--single-process");
|
||||||
|
options.AddArgument("--no-zygote");
|
||||||
|
options.AddArgument("--disable-background-networking");
|
||||||
|
|
||||||
|
// 캐시 및 저장소 비활성화
|
||||||
|
options.AddArgument("--disable-application-cache");
|
||||||
|
options.AddArgument("--disable-offline-load-stale-cache");
|
||||||
|
options.AddArgument("--disk-cache-size=0");
|
||||||
|
options.AddArgument("--media-cache-size=0");
|
||||||
|
options.AddArgument("--aggressive-cache-discard");
|
||||||
|
options.AddArgument("--enable-aggressive-domstorage-flushing");
|
||||||
|
|
||||||
|
// 기타 안정성 옵션
|
||||||
|
options.AddArgument("--enable-low-end-device-mode");
|
||||||
|
options.AddArgument("--force-fieldtrials=*BackgroundTracing/default/");
|
||||||
|
|
||||||
|
// 사용자 데이터 디렉토리 설정 (관리자 권한 없이도 접근 가능)
|
||||||
|
options.AddArgument($"--user-data-dir={UserDataDir}");
|
||||||
|
options.AddArgument("--no-first-run");
|
||||||
|
options.AddArgument("--no-default-browser-check");
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 검색 최적화된 Chrome 옵션을 반환합니다
|
||||||
|
/// </summary>
|
||||||
|
public static ChromeOptions GetSearchOptimizedOptions()
|
||||||
|
{
|
||||||
|
var options = CreateBaseChromeOptions(true);
|
||||||
|
|
||||||
|
// 검색에 필요한 기능만 활성화
|
||||||
|
options.AddArgument("--enable-javascript");
|
||||||
|
options.AddArgument("--enable-images");
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
private static async Task<bool> TestExistingDriver(string driverPath)
|
private static async Task<bool> TestExistingDriver(string driverPath)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine($"기존 드라이버 테스트: {driverPath}");
|
Console.WriteLine($"드라이버 테스트: {driverPath}");
|
||||||
|
|
||||||
// ChromeDriver 서비스 설정
|
// ChromeDriver 서비스 설정
|
||||||
var service = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath));
|
var service = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath));
|
||||||
service.HideCommandPromptWindow = true;
|
service.HideCommandPromptWindow = true;
|
||||||
|
|
||||||
// 간단한 테스트 실행
|
// 기본 Chrome 옵션 사용하고 테스트용 추가 옵션 설정
|
||||||
var options = new OpenQA.Selenium.Chrome.ChromeOptions();
|
var options = CreateBaseChromeOptions(true);
|
||||||
options.AddArgument("--headless");
|
|
||||||
options.AddArgument("--no-sandbox");
|
// 테스트용 추가 옵션들
|
||||||
options.AddArgument("--disable-dev-shm-usage");
|
options.AddArgument("--log-level=3"); // 오류만 표시
|
||||||
options.AddArgument("--disable-gpu");
|
options.AddArgument("--silent");
|
||||||
options.AddArgument("--remote-debugging-port=0");
|
options.AddArgument("--window-size=1920,1080");
|
||||||
|
options.AddArgument("--start-maximized");
|
||||||
|
options.AddArgument("--disable-blink-features=AutomationControlled");
|
||||||
|
options.AddArgument("--enable-aggressive-domstorage-flushing");
|
||||||
|
|
||||||
using (var driver = new OpenQA.Selenium.Chrome.ChromeDriver(service, options))
|
using (var driver = new OpenQA.Selenium.Chrome.ChromeDriver(service, options))
|
||||||
{
|
{
|
||||||
|
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(15);
|
||||||
|
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
|
||||||
|
|
||||||
driver.Navigate().GoToUrl("https://www.google.com");
|
driver.Navigate().GoToUrl("https://www.google.com");
|
||||||
var title = driver.Title;
|
var title = driver.Title;
|
||||||
Console.WriteLine($"드라이버 테스트 성공: {title}");
|
Console.WriteLine($"드라이버 테스트 성공: {title}");
|
||||||
@@ -370,9 +668,114 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"기존 드라이버 테스트 실패: {ex.Message}");
|
Console.WriteLine($"드라이버 테스트 실패: {ex.Message}");
|
||||||
|
|
||||||
|
// DevToolsActivePort 및 Chrome 크래시 관련 특별 처리
|
||||||
|
if (ex.Message.Contains("DevToolsActivePort file doesn't exist") ||
|
||||||
|
ex.Message.Contains("was killed") ||
|
||||||
|
ex.Message.Contains("Chrome has crashed"))
|
||||||
|
{
|
||||||
|
Console.WriteLine("DevToolsActivePort 또는 Chrome 크래시 감지됨. 사용자 데이터 디렉토리 정리 시도...");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 사용자 데이터 디렉토리 정리
|
||||||
|
if (Directory.Exists(UserDataDir))
|
||||||
|
{
|
||||||
|
Directory.Delete(UserDataDir, true);
|
||||||
|
Console.WriteLine("사용자 데이터 디렉토리 정리 완료");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chrome 프로세스 정리 시도
|
||||||
|
CleanupChromeProcesses();
|
||||||
|
|
||||||
|
// 잠시 대기
|
||||||
|
await Task.Delay(1000);
|
||||||
|
}
|
||||||
|
catch (Exception cleanupEx)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"사용자 데이터 디렉토리 정리 실패: {cleanupEx.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Chrome 프로세스 정리 메서드 추가
|
||||||
|
private static void CleanupChromeProcesses()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine("Chrome 프로세스 정리 시작...");
|
||||||
|
|
||||||
|
// Chrome 관련 프로세스들 찾기
|
||||||
|
var chromeProcesses = System.Diagnostics.Process.GetProcessesByName("chrome");
|
||||||
|
var chromedriverProcesses = System.Diagnostics.Process.GetProcessesByName("chromedriver");
|
||||||
|
|
||||||
|
// Chrome 프로세스 정리
|
||||||
|
bool KILLPROC = false;
|
||||||
|
foreach (var process in chromeProcesses)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!process.HasExited)
|
||||||
|
{
|
||||||
|
KILLPROC = true;
|
||||||
|
process.Kill();
|
||||||
|
Console.WriteLine($"Chrome 프로세스 종료: PID {process.Id}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Chrome 프로세스 종료 실패 (PID {process.Id}): {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChromeDriver 프로세스 정리
|
||||||
|
foreach (var process in chromedriverProcesses)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!process.HasExited)
|
||||||
|
{
|
||||||
|
KILLPROC = true;
|
||||||
|
process.Kill();
|
||||||
|
Console.WriteLine($"ChromeDriver 프로세스 종료: PID {process.Id}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"ChromeDriver 프로세스 종료 실패 (PID {process.Id}): {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 잠시 대기하여 프로세스 완전 종료 확인
|
||||||
|
if(KILLPROC)
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
|
||||||
|
Console.WriteLine("Chrome 프로세스 정리 완료");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Chrome 프로세스 정리 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Dispose()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lock (_lockObject)
|
||||||
|
{
|
||||||
|
_driverPath = null;
|
||||||
|
}
|
||||||
|
Environment.SetEnvironmentVariable("webdriver.chrome.driver", null);
|
||||||
|
Console.WriteLine("ChromeDriverManager 리소스 해제 완료");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"ChromeDriverManager 리소스 해제 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,21 @@
|
|||||||
|
using OpenQA.Selenium.Chrome;
|
||||||
|
using OpenQA.Selenium;
|
||||||
using OpenQA.Selenium.Support.UI;
|
using OpenQA.Selenium.Support.UI;
|
||||||
|
using System.IO;
|
||||||
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Org.BouncyCastle.Bcpg;
|
||||||
|
|
||||||
namespace BokBonCheck
|
namespace BokBonCheck
|
||||||
{
|
{
|
||||||
|
|
||||||
public interface ILibrarySearcher
|
public interface ILibrarySearcher
|
||||||
{
|
{
|
||||||
int No { get; set; }
|
int No { get; set; }
|
||||||
string SiteName { get; }
|
string SiteName { get; }
|
||||||
string SiteUrl { get; }
|
string SiteUrl { get; }
|
||||||
Task<BookSearchResult> SearchAsync(string searchTerm);
|
Task<BookSearchResult> SearchAsync(string searchTerm);
|
||||||
void StartDriver();
|
void StartDriver(bool showBrowser);
|
||||||
void StopDriver();
|
void StopDriver();
|
||||||
|
|
||||||
Task WaitForPageChange(WebDriverWait wait);
|
Task WaitForPageChange(WebDriverWait wait);
|
||||||
|
|||||||
@@ -81,28 +81,55 @@ namespace BokBonCheck
|
|||||||
this.No = no;
|
this.No = no;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartDriver()
|
public void StartDriver(bool showBrowser)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 동기적으로 실행 (권장하지 않음)
|
||||||
|
StartDriverAsync( showBrowser).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"StartDriver 실패: {ex.Message}");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task StartDriverAsync( bool showdriver = false)
|
||||||
{
|
{
|
||||||
if (_driver == null)
|
if (_driver == null)
|
||||||
{
|
{
|
||||||
var driverPath = ChromeDriverManager.GetDriverPath();
|
try
|
||||||
if (string.IsNullOrEmpty(driverPath) || !File.Exists(driverPath))
|
|
||||||
{
|
{
|
||||||
driverPath = ChromeDriverManager.SetupChromeDriverAsync().GetAwaiter().GetResult();
|
// ChromeDriverManager를 사용하여 안정적으로 드라이버 설정
|
||||||
}
|
var driverPath = await ChromeDriverManager.SetupChromeDriverAsync();
|
||||||
|
|
||||||
|
// ChromeDriver 서비스 생성
|
||||||
_service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
|
_service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
|
||||||
_service.HideCommandPromptWindow = true;
|
_service.HideCommandPromptWindow = true;
|
||||||
var options = new ChromeOptions();
|
|
||||||
options.AddArgument("--no-sandbox");
|
// 안정적인 Chrome 옵션 가져오기 (브라우저 창 숨김)
|
||||||
options.AddArgument("--disable-dev-shm-usage");
|
var options = ChromeDriverManager.CreateBaseChromeOptions(!showdriver);
|
||||||
options.AddArgument("--disable-gpu");
|
|
||||||
options.AddArgument("--window-size=640,700");
|
// 추가 보안 및 안정성 옵션
|
||||||
options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
|
options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
|
||||||
options.AddArgument("--disable-blink-features=AutomationControlled");
|
options.AddArgument("--disable-blink-features=AutomationControlled");
|
||||||
options.AddExcludedArgument("enable-automation");
|
options.AddExcludedArgument("enable-automation");
|
||||||
options.AddAdditionalOption("useAutomationExtension", false);
|
options.AddAdditionalOption("useAutomationExtension", false);
|
||||||
|
|
||||||
|
// ChromeDriver 생성
|
||||||
_driver = new ChromeDriver(_service, options);
|
_driver = new ChromeDriver(_service, options);
|
||||||
|
|
||||||
|
// 웹드라이버 감지 방지
|
||||||
((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
|
((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
|
||||||
|
|
||||||
|
Console.WriteLine("NamguLibrarySearcher ChromeDriver 초기화 완료");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"ChromeDriver 초기화 실패: {ex.Message}");
|
||||||
|
throw new InvalidOperationException($"ChromeDriver 초기화에 실패했습니다: {ex.Message}", ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using WebDriverManager.DriverConfigs.Impl;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using UniMarc.마크;
|
||||||
|
|
||||||
namespace BokBonCheck
|
namespace BokBonCheck
|
||||||
{
|
{
|
||||||
@@ -219,28 +220,56 @@ namespace BokBonCheck
|
|||||||
this.No = no;
|
this.No = no;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartDriver()
|
//public async Task StartDriverAsync(bool showdriver=false)
|
||||||
|
//{
|
||||||
|
// if (_driver == null)
|
||||||
|
// {
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// // ChromeDriverManager를 사용하여 안정적으로 드라이버 설정
|
||||||
|
// var driverPath = await ChromeDriverManager.SetupChromeDriverAsync();
|
||||||
|
|
||||||
|
// // ChromeDriver 서비스 생성
|
||||||
|
// _service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
|
||||||
|
// _service.HideCommandPromptWindow = true;
|
||||||
|
|
||||||
|
// // 안정적인 Chrome 옵션 가져오기 (브라우저 창 숨김)
|
||||||
|
// var options = ChromeDriverManager.CreateBaseChromeOptions(!showdriver);
|
||||||
|
|
||||||
|
// // 추가 보안 및 안정성 옵션
|
||||||
|
// options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
|
||||||
|
// options.AddArgument("--disable-blink-features=AutomationControlled");
|
||||||
|
// options.AddExcludedArgument("enable-automation");
|
||||||
|
// options.AddAdditionalOption("useAutomationExtension", false);
|
||||||
|
|
||||||
|
// // ChromeDriver 생성
|
||||||
|
// _driver = new ChromeDriver(_service, options);
|
||||||
|
|
||||||
|
// // 웹드라이버 감지 방지
|
||||||
|
// ((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
|
||||||
|
|
||||||
|
// Console.WriteLine("NamguLibrarySearcher ChromeDriver 초기화 완료");
|
||||||
|
// }
|
||||||
|
// catch (Exception ex)
|
||||||
|
// {
|
||||||
|
// Console.WriteLine($"ChromeDriver 초기화 실패: {ex.Message}");
|
||||||
|
// throw new InvalidOperationException($"ChromeDriver 초기화에 실패했습니다: {ex.Message}", ex);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
// 기존 StartDriver 메서드를 유지하여 호환성 보장
|
||||||
|
public void StartDriver(bool showBrowser)
|
||||||
{
|
{
|
||||||
if (_driver == null)
|
try
|
||||||
{
|
{
|
||||||
var driverPath = ChromeDriverManager.GetDriverPath();
|
// 동기적으로 실행 (권장하지 않음)
|
||||||
if (string.IsNullOrEmpty(driverPath) || !File.Exists(driverPath))
|
StartDriverAsync(showBrowser).GetAwaiter().GetResult();
|
||||||
{
|
|
||||||
driverPath = ChromeDriverManager.SetupChromeDriverAsync().GetAwaiter().GetResult();
|
|
||||||
}
|
}
|
||||||
_service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
|
catch (Exception ex)
|
||||||
_service.HideCommandPromptWindow = true;
|
{
|
||||||
var options = new ChromeOptions();
|
Console.WriteLine($"StartDriver 실패: {ex.Message}");
|
||||||
options.AddArgument("--no-sandbox");
|
throw;
|
||||||
options.AddArgument("--disable-dev-shm-usage");
|
|
||||||
options.AddArgument("--disable-gpu");
|
|
||||||
options.AddArgument("--window-size=640,700");
|
|
||||||
options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
|
|
||||||
options.AddArgument("--disable-blink-features=AutomationControlled");
|
|
||||||
options.AddExcludedArgument("enable-automation");
|
|
||||||
options.AddAdditionalOption("useAutomationExtension", false);
|
|
||||||
_driver = new ChromeDriver(_service, options);
|
|
||||||
((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,6 +288,45 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task StartDriverAsync(bool showdriver = false)
|
||||||
|
{
|
||||||
|
if (_driver == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// ChromeDriverManager를 사용하여 안정적으로 드라이버 설정
|
||||||
|
var driverPath = await ChromeDriverManager.SetupChromeDriverAsync();
|
||||||
|
|
||||||
|
// ChromeDriver 서비스 생성
|
||||||
|
_service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
|
||||||
|
_service.HideCommandPromptWindow = true;
|
||||||
|
|
||||||
|
// 안정적인 Chrome 옵션 가져오기 (브라우저 창 숨김)
|
||||||
|
var options = ChromeDriverManager.CreateBaseChromeOptions(!showdriver);
|
||||||
|
|
||||||
|
// 추가 보안 및 안정성 옵션
|
||||||
|
options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
|
||||||
|
options.AddArgument("--disable-blink-features=AutomationControlled");
|
||||||
|
options.AddExcludedArgument("enable-automation");
|
||||||
|
options.AddAdditionalOption("useAutomationExtension", false);
|
||||||
|
|
||||||
|
// ChromeDriver 생성
|
||||||
|
_driver = new ChromeDriver(_service, options);
|
||||||
|
|
||||||
|
// 웹드라이버 감지 방지
|
||||||
|
((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
|
||||||
|
|
||||||
|
Console.WriteLine("NamguLibrarySearcher ChromeDriver 초기화 완료");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"ChromeDriver 초기화 실패: {ex.Message}");
|
||||||
|
throw new InvalidOperationException($"ChromeDriver 초기화에 실패했습니다: {ex.Message}", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
virtual protected bool SelectLibrary(WebDriverWait wait)
|
virtual protected bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
@@ -330,8 +398,11 @@ namespace BokBonCheck
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// 드라이버가 없으면 자동으로 시작
|
||||||
if (_driver == null)
|
if (_driver == null)
|
||||||
throw new InvalidOperationException("드라이버가 시작되지 않았습니다. StartDriver()를 먼저 호출하세요.");
|
{
|
||||||
|
await StartDriverAsync();
|
||||||
|
}
|
||||||
|
|
||||||
_driver.Navigate().GoToUrl(SiteUrl);
|
_driver.Navigate().GoToUrl(SiteUrl);
|
||||||
|
|
||||||
@@ -540,9 +611,22 @@ namespace BokBonCheck
|
|||||||
// 방법 5: 특정 텍스트가 페이지에 나타날 때까지 대기
|
// 방법 5: 특정 텍스트가 페이지에 나타날 때까지 대기
|
||||||
wait.Until(d =>
|
wait.Until(d =>
|
||||||
{
|
{
|
||||||
var pageText = d.FindElement(By.ClassName("search-result")).Text;
|
try
|
||||||
|
{
|
||||||
|
var byclassname = By.ClassName("search-result");
|
||||||
|
var elm = d.FindElement(byclassname);
|
||||||
|
if (elm == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var pageText = elm.Text;
|
||||||
if (pageText.Contains("검색결과가 없습니다")) return true;
|
if (pageText.Contains("검색결과가 없습니다")) return true;
|
||||||
return pageText.Contains("에 대하여") && pageText.Contains("검색되었습니다");
|
return pageText.Contains("에 대하여") && pageText.Contains("검색되었습니다");
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -292,8 +292,7 @@ namespace WindowsFormsApp1
|
|||||||
string[] db_data = db_res1.Split('|');
|
string[] db_data = db_res1.Split('|');
|
||||||
string[] db_pur = db_res2.Split('|');
|
string[] db_pur = db_res2.Split('|');
|
||||||
|
|
||||||
if (db_res1.Length < 3)
|
if (db_res1.Length < 3) {
|
||||||
{
|
|
||||||
MessageBox.Show("DB호출 에러!", "Error");
|
MessageBox.Show("DB호출 에러!", "Error");
|
||||||
return "False";
|
return "False";
|
||||||
}
|
}
|
||||||
@@ -301,26 +300,20 @@ namespace WindowsFormsApp1
|
|||||||
string fax = string.Empty;
|
string fax = string.Empty;
|
||||||
string emchk = string.Empty;
|
string emchk = string.Empty;
|
||||||
|
|
||||||
if (db_pur.Length > 3)
|
if (db_pur.Length > 3) {
|
||||||
{
|
|
||||||
for(int a= 0; a < db_pur.Length; a++)
|
for(int a= 0; a < db_pur.Length; a++)
|
||||||
{
|
{
|
||||||
if (a % 3 == 0)
|
if (a % 3 == 0) { // 전화번호
|
||||||
{ // 전화번호
|
if (db_pur[a] != "") {
|
||||||
if (db_pur[a] != "")
|
|
||||||
{
|
|
||||||
tel = db_pur[a];
|
tel = db_pur[a];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a % 3 == 1)
|
if (a % 3 == 1) { // 팩스
|
||||||
{ // 팩스
|
if (db_pur[a] != "") {
|
||||||
if (db_pur[a] != "")
|
|
||||||
{
|
|
||||||
fax = db_pur[a];
|
fax = db_pur[a];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a % 3 == 2)
|
if (a % 3 == 2) { // 팩스 이메일 체크
|
||||||
{ // 팩스 이메일 체크
|
|
||||||
emchk = db_pur[a];
|
emchk = db_pur[a];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1460,11 +1453,9 @@ namespace WindowsFormsApp1
|
|||||||
private void checkDir(string localFullPathFile)
|
private void checkDir(string localFullPathFile)
|
||||||
{
|
{
|
||||||
FileInfo finfo = new FileInfo(localFullPathFile);
|
FileInfo finfo = new FileInfo(localFullPathFile);
|
||||||
if (!finfo.Exists)
|
if (!finfo.Exists) {
|
||||||
{
|
|
||||||
DirectoryInfo dInfo = new DirectoryInfo(finfo.DirectoryName);
|
DirectoryInfo dInfo = new DirectoryInfo(finfo.DirectoryName);
|
||||||
if (!dInfo.Exists)
|
if (!dInfo.Exists) {
|
||||||
{
|
|
||||||
dInfo.Create();
|
dInfo.Create();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1565,31 +1556,26 @@ namespace WindowsFormsApp1
|
|||||||
|
|
||||||
num.Add(array_text[a].Substring(0, 3));
|
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);
|
array_text[a] = array_text[a].Remove(0, 3);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
array_text[a] = array_text[a].Remove(0, 5);
|
array_text[a] = array_text[a].Remove(0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
가변길이 += array_text[a] + "\n";
|
가변길이 += array_text[a] + "\n";
|
||||||
int textLength = 0;
|
int textLength = 0;
|
||||||
if (EncodingType == "UTF-8")
|
if (EncodingType == "UTF-8") {
|
||||||
{
|
|
||||||
textLength = Encoding.UTF8.GetBytes(array_text[a]).Length
|
textLength = Encoding.UTF8.GetBytes(array_text[a]).Length
|
||||||
- WordCheck(array_text[a], "▲")
|
- WordCheck(array_text[a], "▲")
|
||||||
- WordCheck(array_text[a], "▼");
|
- WordCheck(array_text[a], "▼");
|
||||||
}
|
}
|
||||||
else if (EncodingType == "UniCode")
|
else if (EncodingType == "UniCode") {
|
||||||
{
|
|
||||||
textLength = Encoding.Unicode.GetBytes(array_text[a]).Length
|
textLength = Encoding.Unicode.GetBytes(array_text[a]).Length
|
||||||
- WordCheck(array_text[a], "▲")
|
- WordCheck(array_text[a], "▲")
|
||||||
- WordCheck(array_text[a], "▼");
|
- WordCheck(array_text[a], "▼");
|
||||||
}
|
}
|
||||||
else
|
else { // ANSI
|
||||||
{ // ANSI
|
|
||||||
textLength = Encoding.Default.GetBytes(array_text[a]).Length
|
textLength = Encoding.Default.GetBytes(array_text[a]).Length
|
||||||
- WordCheck(array_text[a], "▲")
|
- WordCheck(array_text[a], "▲")
|
||||||
- WordCheck(array_text[a], "▼");
|
- WordCheck(array_text[a], "▼");
|
||||||
@@ -1601,8 +1587,7 @@ namespace WindowsFormsApp1
|
|||||||
|
|
||||||
for (int a = 0; a < array_text.Count; a++)
|
for (int a = 0; a < array_text.Count; a++)
|
||||||
{
|
{
|
||||||
if (a == 0)
|
if (a == 0) { //total.Add("0");
|
||||||
{ //total.Add("0");
|
|
||||||
tTotal.Add(0);
|
tTotal.Add(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2203,8 +2188,7 @@ namespace WindowsFormsApp1
|
|||||||
/// <param name="e">EventArgs</param>
|
/// <param name="e">EventArgs</param>
|
||||||
public void Int_Comma(object sender, EventArgs e)
|
public void Int_Comma(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (((TextBox)sender).Text != "")
|
if (((TextBox)sender).Text != "") {
|
||||||
{
|
|
||||||
string text;
|
string text;
|
||||||
text = ((TextBox)sender).Text.Replace(",", "");
|
text = ((TextBox)sender).Text.Replace(",", "");
|
||||||
((TextBox)sender).Text = String.Format("{0:#,###}", Convert.ToInt32(text));
|
((TextBox)sender).Text = String.Format("{0:#,###}", Convert.ToInt32(text));
|
||||||
@@ -2342,8 +2326,7 @@ namespace WindowsFormsApp1
|
|||||||
xml = CheckString(xml, "〈");
|
xml = CheckString(xml, "〈");
|
||||||
doc.LoadXml(xml);
|
doc.LoadXml(xml);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex){
|
||||||
{
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
var json = JsonConvert.SerializeXmlNode(doc);
|
var json = JsonConvert.SerializeXmlNode(doc);
|
||||||
@@ -2537,23 +2520,19 @@ namespace WindowsFormsApp1
|
|||||||
{
|
{
|
||||||
if (length == 1)
|
if (length == 1)
|
||||||
{
|
{
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
tmp_data.Add(docs[Param[b]]["#text"]);
|
tmp_data.Add(docs[Param[b]]["#text"]);
|
||||||
}
|
}
|
||||||
catch (KeyNotFoundException e)
|
catch (KeyNotFoundException e) {
|
||||||
{
|
|
||||||
tmp_data.Add("");
|
tmp_data.Add("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
tmp_data.Add(docs[a][Param[b]]["#text"]);
|
tmp_data.Add(docs[a][Param[b]]["#text"]);
|
||||||
}
|
}
|
||||||
catch (KeyNotFoundException e)
|
catch (KeyNotFoundException e) {
|
||||||
{
|
|
||||||
tmp_data.Add("");
|
tmp_data.Add("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2982,11 +2961,11 @@ namespace WindowsFormsApp1
|
|||||||
}
|
}
|
||||||
public string VersionInfo()
|
public string VersionInfo()
|
||||||
{
|
{
|
||||||
string version = "";
|
string version = "0";
|
||||||
var updatefile = $"{Application.StartupPath}\\update.inf";
|
var fn = Application.StartupPath + "\\update.inf";
|
||||||
if (System.IO.File.Exists(updatefile))
|
if(System.IO.File.Exists(fn))
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(updatefile);
|
StreamReader sr = new StreamReader(fn);
|
||||||
while (!sr.EndOfStream)
|
while (!sr.EndOfStream)
|
||||||
{
|
{
|
||||||
string line = sr.ReadLine();
|
string line = sr.ReadLine();
|
||||||
@@ -2997,7 +2976,7 @@ namespace WindowsFormsApp1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else version = "0";
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
@@ -78,8 +78,8 @@
|
|||||||
<ApplicationIcon>UniMarc.ico</ApplicationIcon>
|
<ApplicationIcon>UniMarc.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="AngleSharp, Version=1.0.4.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
|
<Reference Include="AngleSharp, Version=1.3.0.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\AngleSharp.1.0.4\lib\net472\AngleSharp.dll</HintPath>
|
<HintPath>..\packages\AngleSharp.1.3.0\lib\net472\AngleSharp.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="arCommUtil">
|
<Reference Include="arCommUtil">
|
||||||
<HintPath>..\dll\arCommUtil.dll</HintPath>
|
<HintPath>..\dll\arCommUtil.dll</HintPath>
|
||||||
@@ -90,34 +90,34 @@
|
|||||||
<Reference Include="ArLog.Net4">
|
<Reference Include="ArLog.Net4">
|
||||||
<HintPath>..\dll\ArLog.Net4.dll</HintPath>
|
<HintPath>..\dll\ArLog.Net4.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\BouncyCastle.Cryptography.2.5.1\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="CarlosAg.ExcelXmlWriter">
|
<Reference Include="CarlosAg.ExcelXmlWriter">
|
||||||
<HintPath>..\dll\CarlosAg.ExcelXmlWriter.dll</HintPath>
|
<HintPath>..\dll\CarlosAg.ExcelXmlWriter.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ICSharpCode.SharpZipLib, Version=1.4.2.13, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
|
<Reference Include="ICSharpCode.SharpZipLib, Version=1.4.2.13, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SharpZipLib.1.4.2\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll</HintPath>
|
<HintPath>..\packages\SharpZipLib.1.4.2\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.3, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.3\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.VisualBasic" />
|
<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">
|
<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>
|
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MySql.Data, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" />
|
<Reference Include="MySql.Data, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" />
|
||||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Renci.SshNet, Version=2020.0.1.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
<Reference Include="Renci.SshNet, Version=2025.0.0.1, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll</HintPath>
|
<HintPath>..\packages\SSH.NET.2025.0.0\lib\net462\Renci.SshNet.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
@@ -125,6 +125,9 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.DirectoryServices" />
|
<Reference Include="System.DirectoryServices" />
|
||||||
|
<Reference Include="System.Formats.Asn1, Version=8.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Formats.Asn1.8.0.2\lib\net462\System.Formats.Asn1.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -143,14 +146,14 @@
|
|||||||
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.ServiceModel" />
|
<Reference Include="System.ServiceModel" />
|
||||||
<Reference Include="System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Encoding.CodePages.6.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
|
<HintPath>..\packages\System.Text.Encoding.CodePages.8.0.0\lib\net462\System.Text.Encoding.CodePages.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Text.Encodings.Web, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Encodings.Web.7.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Text.Json, Version=7.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Json, Version=8.0.0.5, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Text.Json.7.0.3\lib\net462\System.Text.Json.dll</HintPath>
|
<HintPath>..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
@@ -170,13 +173,13 @@
|
|||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="WebDriver, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="WebDriver, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Selenium.WebDriver.4.16.2\lib\netstandard2.0\WebDriver.dll</HintPath>
|
<HintPath>..\packages\Selenium.WebDriver.4.34.0\lib\netstandard2.0\WebDriver.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="WebDriver.Support, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="WebDriver.Support, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Selenium.Support.4.16.2\lib\netstandard2.0\WebDriver.Support.dll</HintPath>
|
<HintPath>..\packages\Selenium.Support.4.34.0\lib\netstandard2.0\WebDriver.Support.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="WebDriverManager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="WebDriverManager, Version=2.17.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\WebDriverManager.2.17.1\lib\net462\WebDriverManager.dll</HintPath>
|
<HintPath>..\packages\WebDriverManager.2.17.6\lib\net472\WebDriverManager.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -191,7 +194,7 @@
|
|||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<DependentUpon>Reference.svcmap</DependentUpon>
|
<DependentUpon>Reference.svcmap</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="CUtill.cs" />
|
<Compile Include="PUB.cs" />
|
||||||
<Compile Include="SearchModel\BookSearchService.cs" />
|
<Compile Include="SearchModel\BookSearchService.cs" />
|
||||||
<Compile Include="SearchModel\ChromeDriverManager.cs" />
|
<Compile Include="SearchModel\ChromeDriverManager.cs" />
|
||||||
<Compile Include="SearchModel\DownloadProgressForm.cs">
|
<Compile Include="SearchModel\DownloadProgressForm.cs">
|
||||||
@@ -200,7 +203,6 @@
|
|||||||
<Compile Include="SearchModel\ILibrarySearcher.cs" />
|
<Compile Include="SearchModel\ILibrarySearcher.cs" />
|
||||||
<Compile Include="SearchModel\KwangjuCityLibrarySearcher.cs" />
|
<Compile Include="SearchModel\KwangjuCityLibrarySearcher.cs" />
|
||||||
<Compile Include="SearchModel\NamguLibrarySearcher.cs" />
|
<Compile Include="SearchModel\NamguLibrarySearcher.cs" />
|
||||||
<Compile Include="WebView2Installer.cs" />
|
|
||||||
<Compile Include="마스터\From_User_manage_List.cs">
|
<Compile Include="마스터\From_User_manage_List.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -1954,13 +1956,11 @@
|
|||||||
<Content Include="Resources\3_2_2_편목.png" />
|
<Content Include="Resources\3_2_2_편목.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="..\packages\Selenium.WebDriver.4.16.2\build\Selenium.WebDriver.targets" Condition="Exists('..\packages\Selenium.WebDriver.4.16.2\build\Selenium.WebDriver.targets')" />
|
<Import Project="..\packages\Selenium.WebDriver.4.34.0\build\Selenium.WebDriver.targets" Condition="Exists('..\packages\Selenium.WebDriver.4.34.0\build\Selenium.WebDriver.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
|
<ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
|
||||||
</PropertyGroup>
|
</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\Selenium.WebDriver.4.34.0\build\Selenium.WebDriver.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Selenium.WebDriver.4.34.0\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>
|
</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>
|
</Project>
|
||||||
@@ -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">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<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>
|
<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>
|
||||||
|
|||||||
@@ -1,510 +0,0 @@
|
|||||||
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}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +1,27 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="AngleSharp" version="1.0.4" targetFramework="net472" />
|
<package id="AngleSharp" version="1.3.0" targetFramework="net472" />
|
||||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net472" />
|
<package id="BouncyCastle.Cryptography" version="2.5.1" targetFramework="net472" />
|
||||||
<package id="Microsoft.Web.WebView2" version="1.0.3351.48" targetFramework="net472" />
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
|
||||||
|
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.2" targetFramework="net472" />
|
||||||
|
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.3" targetFramework="net472" />
|
||||||
<package id="Microsoft.Win32.Registry" version="5.0.0" 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="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
|
||||||
<package id="Selenium.Support" version="4.16.2" targetFramework="net472" />
|
<package id="Selenium.Support" version="4.34.0" targetFramework="net472" />
|
||||||
<package id="Selenium.WebDriver" version="4.16.2" targetFramework="net472" />
|
<package id="Selenium.WebDriver" version="4.34.0" targetFramework="net472" />
|
||||||
<package id="SharpZipLib" version="1.4.2" targetFramework="net472" />
|
<package id="SharpZipLib" version="1.4.2" targetFramework="net472" />
|
||||||
<package id="SSH.NET" version="2020.0.1" targetFramework="net472" />
|
<package id="SSH.NET" version="2025.0.0" targetFramework="net472" />
|
||||||
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
||||||
|
<package id="System.Formats.Asn1" version="8.0.2" targetFramework="net472" />
|
||||||
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
|
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
|
||||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
|
||||||
<package id="System.Security.AccessControl" version="5.0.0" targetFramework="net472" />
|
<package id="System.Security.AccessControl" version="5.0.0" targetFramework="net472" />
|
||||||
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net472" />
|
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net472" />
|
||||||
<package id="System.Text.Encoding.CodePages" version="6.0.0" targetFramework="net472" />
|
<package id="System.Text.Encoding.CodePages" version="8.0.0" targetFramework="net472" />
|
||||||
<package id="System.Text.Encodings.Web" version="7.0.0" targetFramework="net472" />
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net472" />
|
||||||
<package id="System.Text.Json" version="7.0.3" targetFramework="net472" />
|
<package id="System.Text.Json" version="8.0.5" targetFramework="net472" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
||||||
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
|
||||||
<package id="WebDriverManager" version="2.17.1" targetFramework="net472" />
|
<package id="WebDriverManager" version="2.17.6" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -190,7 +190,7 @@ namespace WindowsFormsApp1.Delivery
|
|||||||
dc.lbl_ID.Text = dataGridView1.Rows[idx].Cells["DLS_ID"].Value.ToString();
|
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_PW.Text = dataGridView1.Rows[idx].Cells["DLS_PW"].Value.ToString();
|
||||||
dc.lbl_Area.Text = dataGridView1.Rows[idx].Cells["DLS_Area"].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) {
|
if (sl != null) {
|
||||||
sl.tb_SearchClient.Text = value;
|
sl.tb_SearchClient.Text = value;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using ExcelTest;
|
using AR;
|
||||||
|
using ExcelTest;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
@@ -91,7 +92,7 @@ namespace UniMarc
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string tText = string.Format("{0} 를 수정 하시겠습니까?", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
string tText = string.Format("{0} 를 수정 하시겠습니까?", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) == DialogResult.Yes)
|
if (UTIL.MsgQ(tText) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
CheckText();
|
CheckText();
|
||||||
string[] tEdit_tbl = {
|
string[] tEdit_tbl = {
|
||||||
@@ -121,7 +122,7 @@ namespace UniMarc
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) == DialogResult.Yes)
|
if (UTIL.MsgQ(tText) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
string tD_cmd = mDb.DB_Delete("Comp", "idx", dgvList.SelectedRows[0].Cells["dbIDX"].Value.ToString(), "comp_name", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
string tD_cmd = mDb.DB_Delete("Comp", "idx", dgvList.SelectedRows[0].Cells["dbIDX"].Value.ToString(), "comp_name", dgvList.SelectedRows[0].Cells["comp_name"].Value.ToString());
|
||||||
mDb.DB_Send_CMD_reVoid(tD_cmd);
|
mDb.DB_Send_CMD_reVoid(tD_cmd);
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ namespace UniMarc.마크
|
|||||||
// break;
|
// break;
|
||||||
//}
|
//}
|
||||||
string UpCMD = db.More_Update(Table, EditTable, EditColumn, SearchTable, SearchColumn);
|
string UpCMD = db.More_Update(Table, EditTable, EditColumn, SearchTable, SearchColumn);
|
||||||
CUtill.mLog.Add("ADDMarcUPDATE", string.Format("{0}({1}) : {2}", mUserName, mCompidx, UpCMD.Replace("\r", " ").Replace("\n", " ")));
|
PUB.log.Add("ADDMarcUPDATE", string.Format("{0}({1}) : {2}", mUserName, mCompidx, UpCMD.Replace("\r", " ").Replace("\n", " ")));
|
||||||
db.DB_Send_CMD_reVoid(UpCMD);
|
db.DB_Send_CMD_reVoid(UpCMD);
|
||||||
}
|
}
|
||||||
#region UpdateSub
|
#region UpdateSub
|
||||||
@@ -386,7 +386,7 @@ namespace UniMarc.마크
|
|||||||
};
|
};
|
||||||
|
|
||||||
string InCMD = db.DB_INSERT(Table, InsertTable, InsertColumn);
|
string InCMD = db.DB_INSERT(Table, InsertTable, InsertColumn);
|
||||||
CUtill.mLog.Add("ADDMarcINSERT", string.Format("{0}({1}) : {2}", mUserName, mCompidx, InCMD.Replace("\r", " ").Replace("\n", " ")));
|
PUB.log.Add("ADDMarcINSERT", string.Format("{0}({1}) : {2}", mUserName, mCompidx, InCMD.Replace("\r", " ").Replace("\n", " ")));
|
||||||
db.DB_Send_CMD_reVoid(InCMD);
|
db.DB_Send_CMD_reVoid(InCMD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
71
unimarc/unimarc/마크/Check_copyWD.Designer.cs
generated
71
unimarc/unimarc/마크/Check_copyWD.Designer.cs
generated
@@ -28,7 +28,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
this.panel1 = new System.Windows.Forms.Panel();
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
this.chkRetryErrData = new System.Windows.Forms.CheckBox();
|
this.chkRetryErrData = new System.Windows.Forms.CheckBox();
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
@@ -66,8 +66,7 @@
|
|||||||
this.btn_GridReset = new System.Windows.Forms.Button();
|
this.btn_GridReset = new System.Windows.Forms.Button();
|
||||||
this.btn_OpenMemo = new System.Windows.Forms.Button();
|
this.btn_OpenMemo = new System.Windows.Forms.Button();
|
||||||
this.chk_spChar = new System.Windows.Forms.CheckBox();
|
this.chk_spChar = new System.Windows.Forms.CheckBox();
|
||||||
this.panel5 = new System.Windows.Forms.Panel();
|
this.chkShowBrowser = new System.Windows.Forms.CheckBox();
|
||||||
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
|
|
||||||
this.panel1.SuspendLayout();
|
this.panel1.SuspendLayout();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.SearchCount)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.SearchCount)).BeginInit();
|
||||||
@@ -77,12 +76,12 @@
|
|||||||
this.panel6.SuspendLayout();
|
this.panel6.SuspendLayout();
|
||||||
this.statusStrip1.SuspendLayout();
|
this.statusStrip1.SuspendLayout();
|
||||||
this.panel4.SuspendLayout();
|
this.panel4.SuspendLayout();
|
||||||
this.panel5.SuspendLayout();
|
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// panel1
|
// panel1
|
||||||
//
|
//
|
||||||
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.panel1.Controls.Add(this.chkShowBrowser);
|
||||||
this.panel1.Controls.Add(this.chkRetryErrData);
|
this.panel1.Controls.Add(this.chkRetryErrData);
|
||||||
this.panel1.Controls.Add(this.groupBox1);
|
this.panel1.Controls.Add(this.groupBox1);
|
||||||
this.panel1.Controls.Add(this.rb_isNumber);
|
this.panel1.Controls.Add(this.rb_isNumber);
|
||||||
@@ -93,7 +92,7 @@
|
|||||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel1.Location = new System.Drawing.Point(0, 34);
|
this.panel1.Location = new System.Drawing.Point(0, 34);
|
||||||
this.panel1.Name = "panel1";
|
this.panel1.Name = "panel1";
|
||||||
this.panel1.Size = new System.Drawing.Size(629, 106);
|
this.panel1.Size = new System.Drawing.Size(637, 106);
|
||||||
this.panel1.TabIndex = 0;
|
this.panel1.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// chkRetryErrData
|
// chkRetryErrData
|
||||||
@@ -281,7 +280,7 @@
|
|||||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel2.Location = new System.Drawing.Point(0, 0);
|
this.panel2.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
this.panel2.Size = new System.Drawing.Size(629, 34);
|
this.panel2.Size = new System.Drawing.Size(637, 34);
|
||||||
this.panel2.TabIndex = 0;
|
this.panel2.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// btn_SiteDenote
|
// btn_SiteDenote
|
||||||
@@ -318,14 +317,14 @@
|
|||||||
this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control;
|
this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control;
|
||||||
this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
|
this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
|
||||||
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
|
dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control;
|
||||||
dataGridViewCellStyle1.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
dataGridViewCellStyle3.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||||
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
|
dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||||
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||||
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
|
this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3;
|
||||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
this.book_name,
|
this.book_name,
|
||||||
@@ -336,7 +335,7 @@
|
|||||||
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
|
this.dataGridView1.Location = new System.Drawing.Point(0, 0);
|
||||||
this.dataGridView1.Name = "dataGridView1";
|
this.dataGridView1.Name = "dataGridView1";
|
||||||
this.dataGridView1.RowTemplate.Height = 23;
|
this.dataGridView1.RowTemplate.Height = 23;
|
||||||
this.dataGridView1.Size = new System.Drawing.Size(629, 542);
|
this.dataGridView1.Size = new System.Drawing.Size(637, 542);
|
||||||
this.dataGridView1.TabIndex = 1;
|
this.dataGridView1.TabIndex = 1;
|
||||||
this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
|
this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
|
||||||
this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown);
|
this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown);
|
||||||
@@ -384,10 +383,10 @@
|
|||||||
this.panel3.Controls.Add(this.panel4);
|
this.panel3.Controls.Add(this.panel4);
|
||||||
this.panel3.Controls.Add(this.panel1);
|
this.panel3.Controls.Add(this.panel1);
|
||||||
this.panel3.Controls.Add(this.panel2);
|
this.panel3.Controls.Add(this.panel2);
|
||||||
this.panel3.Dock = System.Windows.Forms.DockStyle.Left;
|
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.panel3.Location = new System.Drawing.Point(0, 0);
|
this.panel3.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panel3.Name = "panel3";
|
this.panel3.Name = "panel3";
|
||||||
this.panel3.Size = new System.Drawing.Size(629, 738);
|
this.panel3.Size = new System.Drawing.Size(637, 738);
|
||||||
this.panel3.TabIndex = 3;
|
this.panel3.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// panel6
|
// panel6
|
||||||
@@ -397,7 +396,7 @@
|
|||||||
this.panel6.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.panel6.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.panel6.Location = new System.Drawing.Point(0, 174);
|
this.panel6.Location = new System.Drawing.Point(0, 174);
|
||||||
this.panel6.Name = "panel6";
|
this.panel6.Name = "panel6";
|
||||||
this.panel6.Size = new System.Drawing.Size(629, 564);
|
this.panel6.Size = new System.Drawing.Size(637, 564);
|
||||||
this.panel6.TabIndex = 3;
|
this.panel6.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// statusStrip1
|
// statusStrip1
|
||||||
@@ -406,7 +405,7 @@
|
|||||||
this.lblStatus});
|
this.lblStatus});
|
||||||
this.statusStrip1.Location = new System.Drawing.Point(0, 542);
|
this.statusStrip1.Location = new System.Drawing.Point(0, 542);
|
||||||
this.statusStrip1.Name = "statusStrip1";
|
this.statusStrip1.Name = "statusStrip1";
|
||||||
this.statusStrip1.Size = new System.Drawing.Size(629, 22);
|
this.statusStrip1.Size = new System.Drawing.Size(637, 22);
|
||||||
this.statusStrip1.TabIndex = 2;
|
this.statusStrip1.TabIndex = 2;
|
||||||
this.statusStrip1.Text = "statusStrip1";
|
this.statusStrip1.Text = "statusStrip1";
|
||||||
//
|
//
|
||||||
@@ -428,7 +427,7 @@
|
|||||||
this.panel4.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel4.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel4.Location = new System.Drawing.Point(0, 140);
|
this.panel4.Location = new System.Drawing.Point(0, 140);
|
||||||
this.panel4.Name = "panel4";
|
this.panel4.Name = "panel4";
|
||||||
this.panel4.Size = new System.Drawing.Size(629, 34);
|
this.panel4.Size = new System.Drawing.Size(637, 34);
|
||||||
this.panel4.TabIndex = 2;
|
this.panel4.TabIndex = 2;
|
||||||
//
|
//
|
||||||
// chk_RemoveBrit
|
// chk_RemoveBrit
|
||||||
@@ -481,31 +480,21 @@
|
|||||||
this.chk_spChar.Text = "특수문자 제거";
|
this.chk_spChar.Text = "특수문자 제거";
|
||||||
this.chk_spChar.UseVisualStyleBackColor = true;
|
this.chk_spChar.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// panel5
|
// chkShowBrowser
|
||||||
//
|
//
|
||||||
this.panel5.Controls.Add(this.webBrowser1);
|
this.chkShowBrowser.AutoSize = true;
|
||||||
this.panel5.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.chkShowBrowser.Location = new System.Drawing.Point(515, 81);
|
||||||
this.panel5.Location = new System.Drawing.Point(629, 0);
|
this.chkShowBrowser.Name = "chkShowBrowser";
|
||||||
this.panel5.Name = "panel5";
|
this.chkShowBrowser.Size = new System.Drawing.Size(96, 16);
|
||||||
this.panel5.Size = new System.Drawing.Size(662, 738);
|
this.chkShowBrowser.TabIndex = 8;
|
||||||
this.panel5.TabIndex = 4;
|
this.chkShowBrowser.Text = "브라우저표시";
|
||||||
//
|
this.chkShowBrowser.UseVisualStyleBackColor = true;
|
||||||
// webBrowser1
|
|
||||||
//
|
|
||||||
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(662, 738);
|
|
||||||
this.webBrowser1.TabIndex = 2;
|
|
||||||
//
|
//
|
||||||
// Check_copyWD
|
// Check_copyWD
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1291, 738);
|
this.ClientSize = new System.Drawing.Size(637, 738);
|
||||||
this.Controls.Add(this.panel5);
|
|
||||||
this.Controls.Add(this.panel3);
|
this.Controls.Add(this.panel3);
|
||||||
this.Name = "Check_copyWD";
|
this.Name = "Check_copyWD";
|
||||||
this.Text = "복본조사(WebDriver)";
|
this.Text = "복본조사(WebDriver)";
|
||||||
@@ -526,7 +515,6 @@
|
|||||||
this.statusStrip1.PerformLayout();
|
this.statusStrip1.PerformLayout();
|
||||||
this.panel4.ResumeLayout(false);
|
this.panel4.ResumeLayout(false);
|
||||||
this.panel4.PerformLayout();
|
this.panel4.PerformLayout();
|
||||||
this.panel5.ResumeLayout(false);
|
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -547,7 +535,6 @@
|
|||||||
private System.Windows.Forms.Panel panel3;
|
private System.Windows.Forms.Panel panel3;
|
||||||
private System.Windows.Forms.Panel panel6;
|
private System.Windows.Forms.Panel panel6;
|
||||||
private System.Windows.Forms.Panel panel4;
|
private System.Windows.Forms.Panel panel4;
|
||||||
private System.Windows.Forms.Panel panel5;
|
|
||||||
private System.Windows.Forms.CheckBox chk_spChar;
|
private System.Windows.Forms.CheckBox chk_spChar;
|
||||||
private System.Windows.Forms.CheckBox chk_RemoveBrit;
|
private System.Windows.Forms.CheckBox chk_RemoveBrit;
|
||||||
public System.Windows.Forms.NumericUpDown SearchCount;
|
public System.Windows.Forms.NumericUpDown SearchCount;
|
||||||
@@ -559,7 +546,6 @@
|
|||||||
public System.Windows.Forms.Label lbl_PW;
|
public System.Windows.Forms.Label lbl_PW;
|
||||||
public System.Windows.Forms.Label lbl_ID;
|
public System.Windows.Forms.Label lbl_ID;
|
||||||
private System.Windows.Forms.Button btn_SiteDenote;
|
private System.Windows.Forms.Button btn_SiteDenote;
|
||||||
private System.Windows.Forms.WebBrowser webBrowser1;
|
|
||||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||||
private System.Windows.Forms.ToolStripLabel lblStatus;
|
private System.Windows.Forms.ToolStripLabel lblStatus;
|
||||||
private System.Windows.Forms.RadioButton radTargetAll;
|
private System.Windows.Forms.RadioButton radTargetAll;
|
||||||
@@ -572,5 +558,6 @@
|
|||||||
private System.Windows.Forms.DataGridViewTextBoxColumn dvc_remark;
|
private System.Windows.Forms.DataGridViewTextBoxColumn dvc_remark;
|
||||||
public System.Windows.Forms.CheckBox chkRetryErrData;
|
public System.Windows.Forms.CheckBox chkRetryErrData;
|
||||||
public System.Windows.Forms.GroupBox groupBox1;
|
public System.Windows.Forms.GroupBox groupBox1;
|
||||||
|
public System.Windows.Forms.CheckBox chkShowBrowser;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -132,4 +132,7 @@
|
|||||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
||||||
203
unimarc/unimarc/마크/DLS_Copy.Designer.cs
generated
203
unimarc/unimarc/마크/DLS_Copy.Designer.cs
generated
@@ -29,7 +29,7 @@
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DLS_Copy));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DLS_Copy));
|
||||||
this.label1 = new System.Windows.Forms.Label();
|
this.label1 = new System.Windows.Forms.Button();
|
||||||
this.panel1 = new System.Windows.Forms.Panel();
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
this.panel8 = new System.Windows.Forms.Panel();
|
this.panel8 = new System.Windows.Forms.Panel();
|
||||||
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
this.ISBN = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.ISBN = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.Check = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.Check = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.panel5 = new System.Windows.Forms.Panel();
|
this.panel5 = new System.Windows.Forms.Panel();
|
||||||
|
this.chkShowBrowser = new System.Windows.Forms.CheckBox();
|
||||||
this.chk_RemoveBrit = new System.Windows.Forms.CheckBox();
|
this.chk_RemoveBrit = new System.Windows.Forms.CheckBox();
|
||||||
this.chk_spChar = new System.Windows.Forms.CheckBox();
|
this.chk_spChar = new System.Windows.Forms.CheckBox();
|
||||||
this.btn_ApplyFilter = new System.Windows.Forms.Button();
|
this.btn_ApplyFilter = new System.Windows.Forms.Button();
|
||||||
@@ -48,41 +49,33 @@
|
|||||||
this.btn_Search = new System.Windows.Forms.Button();
|
this.btn_Search = new System.Windows.Forms.Button();
|
||||||
this.rBtn_BookName = new System.Windows.Forms.RadioButton();
|
this.rBtn_BookName = new System.Windows.Forms.RadioButton();
|
||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
|
this.btn_SiteDenote = new System.Windows.Forms.Button();
|
||||||
this.btn_Connect = new System.Windows.Forms.Button();
|
this.btn_Connect = new System.Windows.Forms.Button();
|
||||||
this.lbl_PW = new System.Windows.Forms.Label();
|
this.lbl_PW = new System.Windows.Forms.Label();
|
||||||
this.lbl_Area = new System.Windows.Forms.Label();
|
this.lbl_Area = new System.Windows.Forms.Label();
|
||||||
this.lbl_ID = new System.Windows.Forms.Label();
|
this.lbl_ID = new System.Windows.Forms.Label();
|
||||||
this.lbl_Client = new System.Windows.Forms.Label();
|
this.lbl_Client = new System.Windows.Forms.Label();
|
||||||
this.tb_SearchClient = new System.Windows.Forms.TextBox();
|
this.tb_SearchClient = new System.Windows.Forms.TextBox();
|
||||||
this.btn_Close = new System.Windows.Forms.Button();
|
|
||||||
this.panel4 = new System.Windows.Forms.Panel();
|
|
||||||
this.panel7 = new System.Windows.Forms.Panel();
|
|
||||||
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.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||||
|
this.lblStatus = new System.Windows.Forms.ToolStripLabel();
|
||||||
this.panel1.SuspendLayout();
|
this.panel1.SuspendLayout();
|
||||||
this.panel8.SuspendLayout();
|
this.panel8.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||||
this.panel5.SuspendLayout();
|
this.panel5.SuspendLayout();
|
||||||
this.panel3.SuspendLayout();
|
this.panel3.SuspendLayout();
|
||||||
this.panel2.SuspendLayout();
|
this.panel2.SuspendLayout();
|
||||||
this.panel4.SuspendLayout();
|
this.statusStrip1.SuspendLayout();
|
||||||
this.panel7.SuspendLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.webView21)).BeginInit();
|
|
||||||
this.panel6.SuspendLayout();
|
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// label1
|
// label1
|
||||||
//
|
//
|
||||||
this.label1.AutoSize = true;
|
this.label1.AutoSize = true;
|
||||||
this.label1.Location = new System.Drawing.Point(7, 10);
|
this.label1.Location = new System.Drawing.Point(7, 5);
|
||||||
this.label1.Name = "label1";
|
this.label1.Name = "label1";
|
||||||
this.label1.Size = new System.Drawing.Size(53, 12);
|
this.label1.Size = new System.Drawing.Size(63, 22);
|
||||||
this.label1.TabIndex = 0;
|
this.label1.TabIndex = 0;
|
||||||
this.label1.Text = "납품처명";
|
this.label1.Text = "납품처명";
|
||||||
|
this.label1.Click += new System.EventHandler(this.label1_Click);
|
||||||
//
|
//
|
||||||
// panel1
|
// panel1
|
||||||
//
|
//
|
||||||
@@ -91,20 +84,19 @@
|
|||||||
this.panel1.Controls.Add(this.panel5);
|
this.panel1.Controls.Add(this.panel5);
|
||||||
this.panel1.Controls.Add(this.panel3);
|
this.panel1.Controls.Add(this.panel3);
|
||||||
this.panel1.Controls.Add(this.panel2);
|
this.panel1.Controls.Add(this.panel2);
|
||||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
|
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panel1.Name = "panel1";
|
this.panel1.Name = "panel1";
|
||||||
this.panel1.Size = new System.Drawing.Size(397, 734);
|
this.panel1.Size = new System.Drawing.Size(499, 712);
|
||||||
this.panel1.TabIndex = 1;
|
this.panel1.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// panel8
|
// panel8
|
||||||
//
|
//
|
||||||
this.panel8.Controls.Add(this.statusStrip1);
|
|
||||||
this.panel8.Controls.Add(this.dataGridView1);
|
this.panel8.Controls.Add(this.dataGridView1);
|
||||||
this.panel8.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.panel8.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.panel8.Location = new System.Drawing.Point(0, 103);
|
this.panel8.Location = new System.Drawing.Point(0, 103);
|
||||||
this.panel8.Name = "panel8";
|
this.panel8.Name = "panel8";
|
||||||
this.panel8.Size = new System.Drawing.Size(395, 629);
|
this.panel8.Size = new System.Drawing.Size(497, 607);
|
||||||
this.panel8.TabIndex = 5;
|
this.panel8.TabIndex = 5;
|
||||||
//
|
//
|
||||||
// dataGridView1
|
// dataGridView1
|
||||||
@@ -121,7 +113,7 @@
|
|||||||
this.dataGridView1.Name = "dataGridView1";
|
this.dataGridView1.Name = "dataGridView1";
|
||||||
this.dataGridView1.RowHeadersWidth = 31;
|
this.dataGridView1.RowHeadersWidth = 31;
|
||||||
this.dataGridView1.RowTemplate.Height = 23;
|
this.dataGridView1.RowTemplate.Height = 23;
|
||||||
this.dataGridView1.Size = new System.Drawing.Size(395, 629);
|
this.dataGridView1.Size = new System.Drawing.Size(497, 607);
|
||||||
this.dataGridView1.TabIndex = 0;
|
this.dataGridView1.TabIndex = 0;
|
||||||
this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
|
this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
|
||||||
this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown);
|
this.dataGridView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView1_KeyDown);
|
||||||
@@ -148,19 +140,31 @@
|
|||||||
// panel5
|
// panel5
|
||||||
//
|
//
|
||||||
this.panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.panel5.Controls.Add(this.chkShowBrowser);
|
||||||
this.panel5.Controls.Add(this.chk_RemoveBrit);
|
this.panel5.Controls.Add(this.chk_RemoveBrit);
|
||||||
this.panel5.Controls.Add(this.chk_spChar);
|
this.panel5.Controls.Add(this.chk_spChar);
|
||||||
this.panel5.Controls.Add(this.btn_ApplyFilter);
|
this.panel5.Controls.Add(this.btn_ApplyFilter);
|
||||||
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel5.Location = new System.Drawing.Point(0, 68);
|
this.panel5.Location = new System.Drawing.Point(0, 68);
|
||||||
this.panel5.Name = "panel5";
|
this.panel5.Name = "panel5";
|
||||||
this.panel5.Size = new System.Drawing.Size(395, 35);
|
this.panel5.Size = new System.Drawing.Size(497, 35);
|
||||||
this.panel5.TabIndex = 4;
|
this.panel5.TabIndex = 4;
|
||||||
//
|
//
|
||||||
|
// chkShowBrowser
|
||||||
|
//
|
||||||
|
this.chkShowBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.chkShowBrowser.AutoSize = true;
|
||||||
|
this.chkShowBrowser.Location = new System.Drawing.Point(395, 7);
|
||||||
|
this.chkShowBrowser.Name = "chkShowBrowser";
|
||||||
|
this.chkShowBrowser.Size = new System.Drawing.Size(96, 16);
|
||||||
|
this.chkShowBrowser.TabIndex = 209;
|
||||||
|
this.chkShowBrowser.Text = "브라우저표시";
|
||||||
|
this.chkShowBrowser.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
// chk_RemoveBrit
|
// chk_RemoveBrit
|
||||||
//
|
//
|
||||||
this.chk_RemoveBrit.AutoSize = true;
|
this.chk_RemoveBrit.AutoSize = true;
|
||||||
this.chk_RemoveBrit.Location = new System.Drawing.Point(169, 8);
|
this.chk_RemoveBrit.Location = new System.Drawing.Point(116, 8);
|
||||||
this.chk_RemoveBrit.Name = "chk_RemoveBrit";
|
this.chk_RemoveBrit.Name = "chk_RemoveBrit";
|
||||||
this.chk_RemoveBrit.Size = new System.Drawing.Size(128, 16);
|
this.chk_RemoveBrit.Size = new System.Drawing.Size(128, 16);
|
||||||
this.chk_RemoveBrit.TabIndex = 3;
|
this.chk_RemoveBrit.TabIndex = 3;
|
||||||
@@ -179,6 +183,7 @@
|
|||||||
//
|
//
|
||||||
// btn_ApplyFilter
|
// btn_ApplyFilter
|
||||||
//
|
//
|
||||||
|
this.btn_ApplyFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btn_ApplyFilter.Location = new System.Drawing.Point(314, 3);
|
this.btn_ApplyFilter.Location = new System.Drawing.Point(314, 3);
|
||||||
this.btn_ApplyFilter.Name = "btn_ApplyFilter";
|
this.btn_ApplyFilter.Name = "btn_ApplyFilter";
|
||||||
this.btn_ApplyFilter.Size = new System.Drawing.Size(75, 24);
|
this.btn_ApplyFilter.Size = new System.Drawing.Size(75, 24);
|
||||||
@@ -198,7 +203,7 @@
|
|||||||
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel3.Location = new System.Drawing.Point(0, 33);
|
this.panel3.Location = new System.Drawing.Point(0, 33);
|
||||||
this.panel3.Name = "panel3";
|
this.panel3.Name = "panel3";
|
||||||
this.panel3.Size = new System.Drawing.Size(395, 35);
|
this.panel3.Size = new System.Drawing.Size(497, 35);
|
||||||
this.panel3.TabIndex = 4;
|
this.panel3.TabIndex = 4;
|
||||||
//
|
//
|
||||||
// btn_Reflesh008
|
// btn_Reflesh008
|
||||||
@@ -207,7 +212,7 @@
|
|||||||
this.btn_Reflesh008.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btn_Reflesh008.BackgroundImage")));
|
this.btn_Reflesh008.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btn_Reflesh008.BackgroundImage")));
|
||||||
this.btn_Reflesh008.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
|
this.btn_Reflesh008.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
|
||||||
this.btn_Reflesh008.Dock = System.Windows.Forms.DockStyle.Right;
|
this.btn_Reflesh008.Dock = System.Windows.Forms.DockStyle.Right;
|
||||||
this.btn_Reflesh008.Location = new System.Drawing.Point(360, 0);
|
this.btn_Reflesh008.Location = new System.Drawing.Point(462, 0);
|
||||||
this.btn_Reflesh008.Name = "btn_Reflesh008";
|
this.btn_Reflesh008.Name = "btn_Reflesh008";
|
||||||
this.btn_Reflesh008.Size = new System.Drawing.Size(33, 33);
|
this.btn_Reflesh008.Size = new System.Drawing.Size(33, 33);
|
||||||
this.btn_Reflesh008.TabIndex = 208;
|
this.btn_Reflesh008.TabIndex = 208;
|
||||||
@@ -268,6 +273,7 @@
|
|||||||
// panel2
|
// panel2
|
||||||
//
|
//
|
||||||
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.panel2.Controls.Add(this.btn_SiteDenote);
|
||||||
this.panel2.Controls.Add(this.btn_Connect);
|
this.panel2.Controls.Add(this.btn_Connect);
|
||||||
this.panel2.Controls.Add(this.lbl_PW);
|
this.panel2.Controls.Add(this.lbl_PW);
|
||||||
this.panel2.Controls.Add(this.lbl_Area);
|
this.panel2.Controls.Add(this.lbl_Area);
|
||||||
@@ -278,14 +284,26 @@
|
|||||||
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
|
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel2.Location = new System.Drawing.Point(0, 0);
|
this.panel2.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
this.panel2.Size = new System.Drawing.Size(395, 33);
|
this.panel2.Size = new System.Drawing.Size(497, 33);
|
||||||
this.panel2.TabIndex = 3;
|
this.panel2.TabIndex = 3;
|
||||||
//
|
//
|
||||||
|
// btn_SiteDenote
|
||||||
|
//
|
||||||
|
this.btn_SiteDenote.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.btn_SiteDenote.Location = new System.Drawing.Point(414, 5);
|
||||||
|
this.btn_SiteDenote.Name = "btn_SiteDenote";
|
||||||
|
this.btn_SiteDenote.Size = new System.Drawing.Size(77, 23);
|
||||||
|
this.btn_SiteDenote.TabIndex = 6;
|
||||||
|
this.btn_SiteDenote.Text = "사이트 표출";
|
||||||
|
this.btn_SiteDenote.UseVisualStyleBackColor = true;
|
||||||
|
this.btn_SiteDenote.Click += new System.EventHandler(this.btn_SiteDenote_Click);
|
||||||
|
//
|
||||||
// btn_Connect
|
// btn_Connect
|
||||||
//
|
//
|
||||||
this.btn_Connect.Location = new System.Drawing.Point(278, 5);
|
this.btn_Connect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.btn_Connect.Location = new System.Drawing.Point(338, 5);
|
||||||
this.btn_Connect.Name = "btn_Connect";
|
this.btn_Connect.Name = "btn_Connect";
|
||||||
this.btn_Connect.Size = new System.Drawing.Size(110, 23);
|
this.btn_Connect.Size = new System.Drawing.Size(70, 23);
|
||||||
this.btn_Connect.TabIndex = 5;
|
this.btn_Connect.TabIndex = 5;
|
||||||
this.btn_Connect.Text = "접속";
|
this.btn_Connect.Text = "접속";
|
||||||
this.btn_Connect.UseVisualStyleBackColor = true;
|
this.btn_Connect.UseVisualStyleBackColor = true;
|
||||||
@@ -329,118 +347,42 @@
|
|||||||
//
|
//
|
||||||
// tb_SearchClient
|
// tb_SearchClient
|
||||||
//
|
//
|
||||||
this.tb_SearchClient.Location = new System.Drawing.Point(65, 6);
|
this.tb_SearchClient.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.tb_SearchClient.Location = new System.Drawing.Point(76, 6);
|
||||||
this.tb_SearchClient.Name = "tb_SearchClient";
|
this.tb_SearchClient.Name = "tb_SearchClient";
|
||||||
this.tb_SearchClient.Size = new System.Drawing.Size(198, 21);
|
this.tb_SearchClient.Size = new System.Drawing.Size(256, 21);
|
||||||
this.tb_SearchClient.TabIndex = 1;
|
this.tb_SearchClient.TabIndex = 1;
|
||||||
this.tb_SearchClient.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tb_SearchClient_KeyDown);
|
this.tb_SearchClient.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tb_SearchClient_KeyDown);
|
||||||
//
|
//
|
||||||
// btn_Close
|
|
||||||
//
|
|
||||||
this.btn_Close.Location = new System.Drawing.Point(820, 5);
|
|
||||||
this.btn_Close.Name = "btn_Close";
|
|
||||||
this.btn_Close.Size = new System.Drawing.Size(75, 23);
|
|
||||||
this.btn_Close.TabIndex = 2;
|
|
||||||
this.btn_Close.Text = "닫 기";
|
|
||||||
this.btn_Close.UseVisualStyleBackColor = true;
|
|
||||||
this.btn_Close.Click += new System.EventHandler(this.btn_Close_Click);
|
|
||||||
//
|
|
||||||
// panel4
|
|
||||||
//
|
|
||||||
this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
|
||||||
this.panel4.Controls.Add(this.panel7);
|
|
||||||
this.panel4.Controls.Add(this.panel6);
|
|
||||||
this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.panel4.Location = new System.Drawing.Point(397, 0);
|
|
||||||
this.panel4.Name = "panel4";
|
|
||||||
this.panel4.Size = new System.Drawing.Size(931, 734);
|
|
||||||
this.panel4.TabIndex = 2;
|
|
||||||
//
|
|
||||||
// panel7
|
|
||||||
//
|
|
||||||
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;
|
|
||||||
//
|
|
||||||
// webView21
|
|
||||||
//
|
|
||||||
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
|
|
||||||
//
|
|
||||||
this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
|
||||||
this.panel6.Controls.Add(this.btn_Back);
|
|
||||||
this.panel6.Controls.Add(this.btn_Forward);
|
|
||||||
this.panel6.Controls.Add(this.tb_URL);
|
|
||||||
this.panel6.Controls.Add(this.btn_Close);
|
|
||||||
this.panel6.Dock = System.Windows.Forms.DockStyle.Top;
|
|
||||||
this.panel6.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.panel6.Name = "panel6";
|
|
||||||
this.panel6.Size = new System.Drawing.Size(929, 35);
|
|
||||||
this.panel6.TabIndex = 6;
|
|
||||||
//
|
|
||||||
// btn_Back
|
|
||||||
//
|
|
||||||
this.btn_Back.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
|
||||||
this.btn_Back.Location = new System.Drawing.Point(10, 5);
|
|
||||||
this.btn_Back.Name = "btn_Back";
|
|
||||||
this.btn_Back.Size = new System.Drawing.Size(43, 23);
|
|
||||||
this.btn_Back.TabIndex = 1;
|
|
||||||
this.btn_Back.Text = "<<";
|
|
||||||
this.btn_Back.UseVisualStyleBackColor = true;
|
|
||||||
this.btn_Back.Click += new System.EventHandler(this.btn_Back_Click);
|
|
||||||
//
|
|
||||||
// btn_Forward
|
|
||||||
//
|
|
||||||
this.btn_Forward.Font = new System.Drawing.Font("굴림", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
|
||||||
this.btn_Forward.Location = new System.Drawing.Point(59, 5);
|
|
||||||
this.btn_Forward.Name = "btn_Forward";
|
|
||||||
this.btn_Forward.Size = new System.Drawing.Size(43, 23);
|
|
||||||
this.btn_Forward.TabIndex = 1;
|
|
||||||
this.btn_Forward.Text = ">>";
|
|
||||||
this.btn_Forward.UseVisualStyleBackColor = true;
|
|
||||||
this.btn_Forward.Click += new System.EventHandler(this.btn_Forward_Click);
|
|
||||||
//
|
|
||||||
// tb_URL
|
|
||||||
//
|
|
||||||
this.tb_URL.Location = new System.Drawing.Point(108, 6);
|
|
||||||
this.tb_URL.Name = "tb_URL";
|
|
||||||
this.tb_URL.Size = new System.Drawing.Size(706, 21);
|
|
||||||
this.tb_URL.TabIndex = 0;
|
|
||||||
this.tb_URL.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tb_URL_KeyDown);
|
|
||||||
//
|
|
||||||
// statusStrip1
|
// statusStrip1
|
||||||
//
|
//
|
||||||
this.statusStrip1.Location = new System.Drawing.Point(0, 607);
|
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.lblStatus});
|
||||||
|
this.statusStrip1.Location = new System.Drawing.Point(0, 712);
|
||||||
this.statusStrip1.Name = "statusStrip1";
|
this.statusStrip1.Name = "statusStrip1";
|
||||||
this.statusStrip1.Size = new System.Drawing.Size(395, 22);
|
this.statusStrip1.Size = new System.Drawing.Size(499, 22);
|
||||||
this.statusStrip1.TabIndex = 1;
|
this.statusStrip1.TabIndex = 3;
|
||||||
this.statusStrip1.Text = "statusStrip1";
|
this.statusStrip1.Text = "statusStrip1";
|
||||||
//
|
//
|
||||||
|
// lblStatus
|
||||||
|
//
|
||||||
|
this.lblStatus.Name = "lblStatus";
|
||||||
|
this.lblStatus.Size = new System.Drawing.Size(27, 20);
|
||||||
|
this.lblStatus.Text = "WD";
|
||||||
|
//
|
||||||
// DLS_Copy
|
// DLS_Copy
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1328, 734);
|
this.ClientSize = new System.Drawing.Size(499, 734);
|
||||||
this.Controls.Add(this.panel4);
|
|
||||||
this.Controls.Add(this.panel1);
|
this.Controls.Add(this.panel1);
|
||||||
|
this.Controls.Add(this.statusStrip1);
|
||||||
this.Name = "DLS_Copy";
|
this.Name = "DLS_Copy";
|
||||||
this.Text = "DLS 복본조사";
|
this.Text = "DLS 복본조사";
|
||||||
this.Load += new System.EventHandler(this.DLS_Copy_Load);
|
this.Load += new System.EventHandler(this.DLS_Copy_Load);
|
||||||
this.panel1.ResumeLayout(false);
|
this.panel1.ResumeLayout(false);
|
||||||
this.panel8.ResumeLayout(false);
|
this.panel8.ResumeLayout(false);
|
||||||
this.panel8.PerformLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||||
this.panel5.ResumeLayout(false);
|
this.panel5.ResumeLayout(false);
|
||||||
this.panel5.PerformLayout();
|
this.panel5.PerformLayout();
|
||||||
@@ -448,22 +390,19 @@
|
|||||||
this.panel3.PerformLayout();
|
this.panel3.PerformLayout();
|
||||||
this.panel2.ResumeLayout(false);
|
this.panel2.ResumeLayout(false);
|
||||||
this.panel2.PerformLayout();
|
this.panel2.PerformLayout();
|
||||||
this.panel4.ResumeLayout(false);
|
this.statusStrip1.ResumeLayout(false);
|
||||||
this.panel7.ResumeLayout(false);
|
this.statusStrip1.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.webView21)).EndInit();
|
|
||||||
this.panel6.ResumeLayout(false);
|
|
||||||
this.panel6.PerformLayout();
|
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.Label label1;
|
private System.Windows.Forms.Button label1;
|
||||||
private System.Windows.Forms.Panel panel1;
|
private System.Windows.Forms.Panel panel1;
|
||||||
private System.Windows.Forms.Panel panel3;
|
private System.Windows.Forms.Panel panel3;
|
||||||
private System.Windows.Forms.Panel panel2;
|
private System.Windows.Forms.Panel panel2;
|
||||||
private System.Windows.Forms.Button btn_Close;
|
|
||||||
public System.Windows.Forms.TextBox tb_SearchClient;
|
public System.Windows.Forms.TextBox tb_SearchClient;
|
||||||
public System.Windows.Forms.Label lbl_PW;
|
public System.Windows.Forms.Label lbl_PW;
|
||||||
public System.Windows.Forms.Label lbl_ID;
|
public System.Windows.Forms.Label lbl_ID;
|
||||||
@@ -475,13 +414,6 @@
|
|||||||
private System.Windows.Forms.Label label2;
|
private System.Windows.Forms.Label label2;
|
||||||
private System.Windows.Forms.Button btn_Search;
|
private System.Windows.Forms.Button btn_Search;
|
||||||
public System.Windows.Forms.Label lbl_Area;
|
public System.Windows.Forms.Label lbl_Area;
|
||||||
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;
|
|
||||||
private System.Windows.Forms.Button btn_Back;
|
|
||||||
private System.Windows.Forms.Button btn_Forward;
|
|
||||||
private System.Windows.Forms.Panel panel7;
|
|
||||||
private System.Windows.Forms.Button btn_Reflesh008;
|
private System.Windows.Forms.Button btn_Reflesh008;
|
||||||
private System.Windows.Forms.Button btn_Connect;
|
private System.Windows.Forms.Button btn_Connect;
|
||||||
private System.Windows.Forms.CheckBox chk_RemoveBrit;
|
private System.Windows.Forms.CheckBox chk_RemoveBrit;
|
||||||
@@ -492,6 +424,9 @@
|
|||||||
private System.Windows.Forms.DataGridViewTextBoxColumn ISBN;
|
private System.Windows.Forms.DataGridViewTextBoxColumn ISBN;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn Check;
|
private System.Windows.Forms.DataGridViewTextBoxColumn Check;
|
||||||
private System.Windows.Forms.Button btnStop;
|
private System.Windows.Forms.Button btnStop;
|
||||||
|
private System.Windows.Forms.Button btn_SiteDenote;
|
||||||
|
public System.Windows.Forms.CheckBox chkShowBrowser;
|
||||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||||
|
private System.Windows.Forms.ToolStripLabel lblStatus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using BokBonCheck;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
@@ -7,8 +8,6 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Microsoft.Web.WebView2.Core;
|
|
||||||
using Microsoft.Web.WebView2.WinForms;
|
|
||||||
|
|
||||||
namespace WindowsFormsApp1.Mac
|
namespace WindowsFormsApp1.Mac
|
||||||
{
|
{
|
||||||
@@ -16,7 +15,7 @@ namespace WindowsFormsApp1.Mac
|
|||||||
{
|
{
|
||||||
Main main;
|
Main main;
|
||||||
public string compidx;
|
public string compidx;
|
||||||
string url = "https://reading.jnei.go.kr";
|
string URL = "https://reading.jnei.go.kr";
|
||||||
public DLS_Copy(Main _main)
|
public DLS_Copy(Main _main)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -24,47 +23,107 @@ namespace WindowsFormsApp1.Mac
|
|||||||
compidx = main.com_idx;
|
compidx = main.com_idx;
|
||||||
|
|
||||||
|
|
||||||
url = "https://dls.edunet.net/DLS/totalLoginMain";
|
URL = "https://dls.edunet.net/DLS/totalLoginMain";
|
||||||
//url = "https://read365.edunet.net/TotalSearch";
|
//url = "https://read365.edunet.net/TotalSearch";
|
||||||
|
|
||||||
//변경된 홈페이지: https://dls.edunet.net/DLS/totalLoginMain사용 ID / 비번 : t5191774 / tb5191774
|
//변경된 홈페이지: https://dls.edunet.net/DLS/totalLoginMain사용 ID / 비번 : t5191774 / tb5191774
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void DLS_Copy_Load(object sender, EventArgs e)
|
private void DLS_Copy_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
try
|
|
||||||
{
|
|
||||||
compidx = main.com_idx;
|
|
||||||
|
|
||||||
this.Show();
|
this.Show();
|
||||||
Application.DoEvents();
|
Application.DoEvents();
|
||||||
|
|
||||||
// WebView2 환경 준비 (Fixed Version 지원)
|
//크롤링
|
||||||
var environment = await WebView2Installer.GetWebView2EnvironmentAsync();
|
InitializeChromeDriver();
|
||||||
await webView21.EnsureCoreWebView2Async(environment);
|
|
||||||
webView21.CoreWebView2.NavigationCompleted += WebView21_NavigationCompleted;
|
}
|
||||||
webView21.CoreWebView2.Navigate(url);
|
#region 크롤링
|
||||||
|
|
||||||
|
private readonly BookSearchService _searchService;
|
||||||
|
private bool _isSearching = false;
|
||||||
|
private bool _isDriverReady = false;
|
||||||
|
|
||||||
|
private async void InitializeChromeDriver()
|
||||||
|
{
|
||||||
|
var lblStatus = this.lblStatus;// (Label)this.Controls["lblStatus"];
|
||||||
|
lblStatus.Text = "WebDriver:Chrome 드라이버 확인 중...";
|
||||||
|
lblStatus.ForeColor = Color.Blue;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Chrome 설치 확인
|
||||||
|
if (!ChromeDriverManager.IsChromeInstalled())
|
||||||
|
{
|
||||||
|
MessageBox.Show("Google Chrome이 설치되어 있지 않습니다. Chrome을 설치한 후 프로그램을 다시 실행해주세요.",
|
||||||
|
"Chrome 필요", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
lblStatus.Text = "WebDriver:Chrome이 설치되지 않음";
|
||||||
|
lblStatus.ForeColor = Color.Red;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 기존 드라이버가 준비되어 있는지 확인
|
||||||
|
if (ChromeDriverManager.IsDriverReady())
|
||||||
|
{
|
||||||
|
lblStatus.Text = "WebDriver:Ready";
|
||||||
|
lblStatus.ForeColor = Color.Green;
|
||||||
|
_isDriverReady = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 드라이버가 없거나 작동하지 않으면 다운로드 진행 창 표시
|
||||||
|
using (var progressForm = new DownloadProgressForm())
|
||||||
|
{
|
||||||
|
progressForm.Show();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// ChromeDriver 설정
|
||||||
|
await ChromeDriverManager.SetupChromeDriverAsync(progressForm);
|
||||||
|
|
||||||
|
// 드라이버 테스트
|
||||||
|
var isWorking = await ChromeDriverManager.TestChromeDriverAsync(progressForm);
|
||||||
|
|
||||||
|
if (isWorking)
|
||||||
|
{
|
||||||
|
_isDriverReady = true;
|
||||||
|
lblStatus.Text = "WebDriver:Ready";
|
||||||
|
lblStatus.ForeColor = Color.Green;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lblStatus.Text = "WebDriver:Chrome 드라이버 테스트 실패";
|
||||||
|
lblStatus.ForeColor = Color.Red;
|
||||||
|
MessageBox.Show("Chrome 드라이버 테스트에 실패했습니다. 인터넷 연결을 확인하고 프로그램을 다시 실행해주세요.",
|
||||||
|
"드라이버 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
lblStatus.Text = "WebDriver:드라이버 다운로드가 취소되었습니다.";
|
||||||
|
lblStatus.ForeColor = Color.Orange;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show(
|
lblStatus.Text = "WebDriver:Chrome 드라이버 설정 실패";
|
||||||
$"WebView2 초기화 중 오류가 발생했습니다: {ex.Message}\n\n" +
|
lblStatus.ForeColor = Color.Red;
|
||||||
"웹 기능이 필요하면 나중에 다시 시도해 주세요.",
|
MessageBox.Show($"Chrome 드라이버 설정 중 오류가 발생했습니다: {ex.Message}",
|
||||||
"WebView2 초기화 오류",
|
"설정 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
MessageBoxButtons.OK,
|
return;
|
||||||
MessageBoxIcon.Error
|
|
||||||
);
|
|
||||||
|
|
||||||
// webView2 숨기고 오류 상태 표시
|
|
||||||
webView21.Visible = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private void WebView21_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
tb_URL.Text = webView21.CoreWebView2.Source;
|
lblStatus.Text = "WebDriver:Chrome 드라이버 설정 실패";
|
||||||
|
lblStatus.ForeColor = Color.Red;
|
||||||
|
MessageBox.Show($"Chrome 드라이버 설정 중 오류가 발생했습니다: {ex.Message}",
|
||||||
|
"설정 오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
|
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
|
||||||
{
|
{
|
||||||
Skill_Grid sg = new Skill_Grid();
|
Skill_Grid sg = new Skill_Grid();
|
||||||
@@ -95,7 +154,7 @@ namespace WindowsFormsApp1.Mac
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private async void btn_Connect_Click(object sender, EventArgs e)
|
private void btn_Connect_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (lbl_Client.Text == "Client")
|
if (lbl_Client.Text == "Client")
|
||||||
{
|
{
|
||||||
@@ -107,44 +166,11 @@ namespace WindowsFormsApp1.Mac
|
|||||||
MessageBox.Show("설정된 지역이 없습니다. 납품처 관리에서 확인해주세요.");
|
MessageBox.Show("설정된 지역이 없습니다. 납품처 관리에서 확인해주세요.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string url = webView21.CoreWebView2.Source;
|
|
||||||
|
|
||||||
//await webView21.CoreWebView2.ExecuteScriptAsync("document.getElementById('headerLoginBtn').click();");
|
|
||||||
|
|
||||||
await Task.Delay(1000);
|
|
||||||
|
|
||||||
await DLS_Login(url);
|
|
||||||
}
|
}
|
||||||
#region Connect_SUB
|
|
||||||
|
|
||||||
private async Task DLS_Login(string url)
|
|
||||||
{
|
|
||||||
if (lbl_ID.Text == "" || lbl_PW.Text == "")
|
|
||||||
{
|
|
||||||
MessageBox.Show("ID 혹은 PW가 없습니다.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
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('"');
|
|
||||||
|
|
||||||
//id설정
|
|
||||||
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('lgID').value = '{ID}';");
|
|
||||||
|
|
||||||
//pw 설정
|
|
||||||
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('lgPW').value = '{PW}';");
|
|
||||||
|
|
||||||
//로그인버튼 클릭
|
|
||||||
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 bool tStop = false;
|
||||||
private int tSearchIDX = 0;
|
private int tSearchIDX = 0;
|
||||||
private async void btn_Search_Click(object sender, EventArgs e)
|
private void btn_Search_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
tStop = false;
|
tStop = false;
|
||||||
if (dataGridView1.Rows[0].Cells["ISBN"].Value == null && rBtn_ISBN.Checked)
|
if (dataGridView1.Rows[0].Cells["ISBN"].Value == null && rBtn_ISBN.Checked)
|
||||||
@@ -157,96 +183,17 @@ namespace WindowsFormsApp1.Mac
|
|||||||
MessageBox.Show("도서명이 입력되지않았습니다!");
|
MessageBox.Show("도서명이 입력되지않았습니다!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!await SearchCopy(rBtn_ISBN.Checked))
|
|
||||||
return;
|
|
||||||
|
|
||||||
MessageBox.Show("완료되었습니다.");
|
MessageBox.Show("완료되었습니다.");
|
||||||
}
|
}
|
||||||
#region SearchClick_Sub
|
|
||||||
|
|
||||||
private async Task<bool> SearchCopy(bool isISBN)
|
|
||||||
{
|
|
||||||
if (!webView21.CoreWebView2.Source.Contains("collectionFormMA"))
|
|
||||||
{
|
|
||||||
MessageBox.Show("자료관리 창이 아닙니다!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int count = dataGridView1.Rows.Count;
|
|
||||||
|
|
||||||
for (int a = 0; a < count; a++)
|
|
||||||
{
|
|
||||||
if (tSearchIDX != 0) a = tSearchIDX;
|
|
||||||
string Check;
|
|
||||||
if (isISBN)
|
|
||||||
{
|
|
||||||
string Target = dataGridView1.Rows[a].Cells["ISBN"].Value.ToString();
|
|
||||||
Check = await SearchISBN(Target);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string Target = dataGridView1.Rows[a].Cells["Book_name"].Value.ToString();
|
|
||||||
Check = await SearchName(Target);
|
|
||||||
}
|
|
||||||
if (Check == "0")
|
|
||||||
Check = "";
|
|
||||||
dataGridView1.Rows[a].Cells["Check"].Value = Check;
|
|
||||||
if (Check == "")
|
|
||||||
dataGridView1.Rows[a].DefaultCellStyle.BackColor = Color.LightGray;
|
|
||||||
else
|
|
||||||
dataGridView1.Rows[a].DefaultCellStyle.BackColor = Color.Yellow;
|
|
||||||
|
|
||||||
if (tStop)
|
|
||||||
{
|
|
||||||
tSearchIDX = a + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tStop) MessageBox.Show("검색이 중지 되었습니다.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 도서명 필터로 DLS복본 검색
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Target">도서명</param>
|
|
||||||
/// <param name="row">행 번호</param>
|
|
||||||
private async Task<string> SearchName(string Target)
|
|
||||||
{
|
|
||||||
await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('bib1').value = '{Target.Replace("'", "\\'")}';");
|
|
||||||
await webView21.CoreWebView2.ExecuteScriptAsync("document.querySelector('.button_search').click();");
|
|
||||||
await Task.Delay(5000);
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// ISBN 필터로 DLS복본 검색
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Target">ISBN</param>
|
|
||||||
/// <param name="row">행 번호</param>
|
|
||||||
private async Task<string> SearchISBN(string Target)
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DLS지역 코드 변환
|
/// DLS지역 코드 변환
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>코드</returns>
|
/// <returns>코드</returns>
|
||||||
public async Task<string> SetArea(string dlsArea, bool move = false)
|
public string SetArea(string dlsArea, bool move = false)
|
||||||
{
|
{
|
||||||
string[] Area = {
|
string[] Area = {
|
||||||
"서울", "부산", "대구", "인천", "광주",
|
"서울", "부산", "대구", "인천", "광주",
|
||||||
@@ -271,19 +218,6 @@ namespace WindowsFormsApp1.Mac
|
|||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (move)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string elementValue = await webView21.CoreWebView2.ExecuteScriptAsync($"document.getElementById('{Code[idx]}').value;");
|
|
||||||
elementValue = elementValue.Trim('"');
|
|
||||||
webView21.CoreWebView2.Navigate(elementValue);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
AR.UTIL.MsgE("지역변경실패, 사이트가 변경되었을 수 있습니다.\n잠시 후 다시시도하세요\n"+ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return Code[idx];
|
return Code[idx];
|
||||||
@@ -306,32 +240,6 @@ namespace WindowsFormsApp1.Mac
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btn_Close_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
this.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btn_Back_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (webView21.CoreWebView2.CanGoBack)
|
|
||||||
webView21.CoreWebView2.GoBack();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btn_Forward_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (webView21.CoreWebView2.CanGoForward)
|
|
||||||
webView21.CoreWebView2.GoForward();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tb_URL_KeyDown(object sender, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.KeyCode == Keys.Enter)
|
|
||||||
{
|
|
||||||
string url = tb_URL.Text;
|
|
||||||
webView21.CoreWebView2.Navigate(url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btn_Reflesh008_Click(object sender, EventArgs e)
|
private void btn_Reflesh008_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
tSearchIDX = 0;
|
tSearchIDX = 0;
|
||||||
@@ -348,5 +256,15 @@ namespace WindowsFormsApp1.Mac
|
|||||||
tStop = true;
|
tStop = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void btn_SiteDenote_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (URL == null) return;
|
||||||
|
AR.UTIL.RunExplorer(URL);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void label1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ClientSearch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,9 +117,6 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</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">
|
<metadata name="Book_name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@@ -169,4 +166,7 @@
|
|||||||
P87mU+ZvyRQDAAAAAElFTkSuQmCC
|
P87mU+ZvyRQDAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
|
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
||||||
@@ -579,7 +579,7 @@ namespace ExcelTest
|
|||||||
date, mCompidx };
|
date, mCompidx };
|
||||||
|
|
||||||
string Incmd = db.DB_INSERT(table_name, Insert_tbl, Insert_col);
|
string Incmd = db.DB_INSERT(table_name, Insert_tbl, Insert_col);
|
||||||
CUtill.mLog.Add("INSERT", string.Format( "{0}({1},{2}) : {3}", mUserName, mCompidx, List_Book.Rows[SaveRowIdx].DefaultCellStyle.ForeColor, Incmd));
|
PUB.log.Add("INSERT", string.Format( "{0}({1},{2}) : {3}", mUserName, mCompidx, List_Book.Rows[SaveRowIdx].DefaultCellStyle.ForeColor, Incmd));
|
||||||
db.DB_Send_CMD_reVoid(Incmd);
|
db.DB_Send_CMD_reVoid(Incmd);
|
||||||
isNewData = true;
|
isNewData = true;
|
||||||
}
|
}
|
||||||
@@ -631,7 +631,7 @@ namespace ExcelTest
|
|||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
string U_cmd = db.More_Update(table_name, Edit_tbl, Edit_col, Sear_tbl, Sear_col);
|
string U_cmd = db.More_Update(table_name, Edit_tbl, Edit_col, Sear_tbl, Sear_col);
|
||||||
CUtill.mLog.Add("Update", string.Format( "{0}({1},{2}) : {3}", mUserName, mCompidx, List_Book.Rows[SaveRowIdx].DefaultCellStyle.ForeColor , U_cmd.Replace("\r", " ").Replace("\n", " ")));
|
PUB.log.Add("Update", string.Format( "{0}({1},{2}) : {3}", mUserName, mCompidx, List_Book.Rows[SaveRowIdx].DefaultCellStyle.ForeColor , U_cmd.Replace("\r", " ").Replace("\n", " ")));
|
||||||
db.DB_Send_CMD_reVoid(U_cmd);
|
db.DB_Send_CMD_reVoid(U_cmd);
|
||||||
isNewData = false;
|
isNewData = false;
|
||||||
}
|
}
|
||||||
@@ -645,14 +645,14 @@ namespace ExcelTest
|
|||||||
|
|
||||||
if (isNewData) {
|
if (isNewData) {
|
||||||
string MidxQuery = string.Format("SELECT `idx` FROM Marc WHERE isbn = {0} AND `compidx` = {1};", grid_data[0], mCompidx);
|
string MidxQuery = string.Format("SELECT `idx` FROM Marc WHERE isbn = {0} AND `compidx` = {1};", grid_data[0], mCompidx);
|
||||||
CUtill.mLog.Add("MarcInsert", string.Format( "{0}({1}) : {2}", mUserName, mCompidx, MidxQuery));
|
PUB.log.Add("MarcInsert", string.Format( "{0}({1}) : {2}", mUserName, mCompidx, MidxQuery));
|
||||||
Midx = db.DB_Send_CMD_Search(MidxQuery).Replace("|", "");
|
Midx = db.DB_Send_CMD_Search(MidxQuery).Replace("|", "");
|
||||||
List_Book.Rows[SaveRowIdx].Cells["marc_idx"].Value = Midx;
|
List_Book.Rows[SaveRowIdx].Cells["marc_idx"].Value = Midx;
|
||||||
}
|
}
|
||||||
|
|
||||||
string UpdateListIndex = string.Format("UPDATE `Obj_List_Book` SET `m_idx` = {0} WHERE `idx` = {1} AND 'compidx' ={2};",
|
string UpdateListIndex = string.Format("UPDATE `Obj_List_Book` SET `m_idx` = {0} WHERE `idx` = {1} AND 'compidx' ={2};",
|
||||||
Midx, List_Book.Rows[SaveRowIdx].Cells["list_idx"].Value.ToString(), mCompidx);
|
Midx, List_Book.Rows[SaveRowIdx].Cells["list_idx"].Value.ToString(), mCompidx);
|
||||||
CUtill.mLog.Add("MarcUpdate", string.Format( "{0}({1}) : {2}", mUserName, mCompidx, UpdateListIndex));
|
PUB.log.Add("MarcUpdate", string.Format( "{0}({1}) : {2}", mUserName, mCompidx, UpdateListIndex));
|
||||||
db.DB_Send_CMD_reVoid(UpdateListIndex);
|
db.DB_Send_CMD_reVoid(UpdateListIndex);
|
||||||
MessageBox.Show("저장되었습니다!");
|
MessageBox.Show("저장되었습니다!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using ExcelTest;
|
using AR;
|
||||||
|
using ExcelTest;
|
||||||
using MySqlX.XDevAPI.Relational;
|
using MySqlX.XDevAPI.Relational;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -278,7 +279,7 @@ namespace WindowsFormsApp1.Home
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string tText = string.Format("{0} 를 수정 하시겠습니까?", dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString());
|
string tText = string.Format("{0} 를 수정 하시겠습니까?", dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) == DialogResult.Yes)
|
if (UTIL.MsgQ(tText) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
if (tb_ID.Text == "" || tb_PW.Text == "" || tb_Name.Text == "")
|
if (tb_ID.Text == "" || tb_PW.Text == "" || tb_Name.Text == "")
|
||||||
{
|
{
|
||||||
@@ -366,7 +367,7 @@ namespace WindowsFormsApp1.Home
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString());
|
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) == DialogResult.Yes)
|
if (UTIL.MsgQ(tText) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
int row = dataGridView1.CurrentRow.Index;
|
int row = dataGridView1.CurrentRow.Index;
|
||||||
string tID = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();
|
string tID = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ namespace WindowsFormsApp1.Home
|
|||||||
if (RowIndex < 0)
|
if (RowIndex < 0)
|
||||||
return;
|
return;
|
||||||
string tText = string.Format("{0} 를 추가 하시겠습니까?", tb_sangho.Text);
|
string tText = string.Format("{0} 를 추가 하시겠습니까?", tb_sangho.Text);
|
||||||
if (CUtill.MsgQ(tText) != DialogResult.Yes) return;
|
if (UTIL.MsgQ(tText) != DialogResult.Yes) return;
|
||||||
|
|
||||||
if (tb_sangho.Text == "")
|
if (tb_sangho.Text == "")
|
||||||
{
|
{
|
||||||
@@ -188,7 +188,7 @@ namespace WindowsFormsApp1.Home
|
|||||||
if (tRowIndex < 0)
|
if (tRowIndex < 0)
|
||||||
return;
|
return;
|
||||||
string tText = string.Format("{0} 를 수정 하시겠습니까?", dv1.Rows[tRowIndex].Cells["sangho"].Value.ToString());
|
string tText = string.Format("{0} 를 수정 하시겠습니까?", dv1.Rows[tRowIndex].Cells["sangho"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) != DialogResult.Yes) return;
|
if (UTIL.MsgQ(tText) != DialogResult.Yes) return;
|
||||||
if (tb_sangho.Text == "")
|
if (tb_sangho.Text == "")
|
||||||
{
|
{
|
||||||
MessageBox.Show("업체명이 비어있습니다.");
|
MessageBox.Show("업체명이 비어있습니다.");
|
||||||
@@ -268,7 +268,7 @@ namespace WindowsFormsApp1.Home
|
|||||||
if (RowIndex < 0)
|
if (RowIndex < 0)
|
||||||
return;
|
return;
|
||||||
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dv1.Rows[RowIndex].Cells["sangho"].Value.ToString());
|
string tText = string.Format("{0} 를 삭제 하시겠습니까?", dv1.Rows[RowIndex].Cells["sangho"].Value.ToString());
|
||||||
if (CUtill.MsgQ(tText) != DialogResult.Yes) return;
|
if (UTIL.MsgQ(tText) != DialogResult.Yes) return;
|
||||||
string D_cmd = db.DB_Delete("Client", "idx", dv1.Rows[RowIndex].Cells["idx"].Value.ToString(), "c_sangho", tb_sangho.Text);
|
string D_cmd = db.DB_Delete("Client", "idx", dv1.Rows[RowIndex].Cells["idx"].Value.ToString(), "c_sangho", tb_sangho.Text);
|
||||||
db.DB_Send_CMD_reVoid(D_cmd);
|
db.DB_Send_CMD_reVoid(D_cmd);
|
||||||
Made_Grid();
|
Made_Grid();
|
||||||
|
|||||||
Reference in New Issue
Block a user