CHAT.GPT에게 질문)
1. windows c# 코드에서 SendMessage 사용할떄에, 파라미터에 담겨진 내용을 1000번 보냈을떄에, 받는부분이 없다면, 어디로 저장되나요? 아니면 없어지나요?

2. PostMessage 를 사용하더라도 PostMessage를 사용한 프로세스가 종료되면, 보낸메세지는 사라지나요? 프로세스가 종료될때에 SendMessage와 PostMessage의 상황을 설명해주세요

3. 송신프로세스 종료에 대해서 설명해주세요

CHAT.GPT 답)

SendMessage 함수는 Windows API에서 메시지를 다른 윈도우에 전달할 때 사용됩니다. 이 함수는 기본적으로 메시지를 지정된 윈도우의 프로시저로 보내며, 수신자가 없다면 메시지는 처리되지 않습니다.

질문에서 말한 **"1000번 보냈을 때 받는 부분이 없다면, 어디로 저장되나요?"**에 대한 답을 설명하겠습니다:

  1. 메시지가 수신되지 않으면: SendMessage 함수는 메시지가 처리될 때까지 호출한 스레드를 블록(block)합니다. 수신자가 없다면 메시지는 처리되지 않지만, 수신자에게 전달될 장소나 큐에 메시지가 저장되는 것은 아닙니다.
  2. 메시지가 손실되는 경우: 만약 SendMessage로 보낸 메시지가 처리되지 않거나, 수신자가 메시지를 받지 못한다면, 해당 메시지는 "사라지게" 됩니다. Windows 메시지 시스템은 수신자 없이 메시지를 저장하는 방식으로 동작하지 않기 때문에, 수신자가 없을 경우 메시지는 내부 큐에 쌓이지 않고, 처리되지 않습니다.
  3. 메시지 큐: Windows 메시지 시스템에서 메시지는 일반적으로 프로세스의 메시지 큐에 저장됩니다. 하지만, SendMessage 함수는 메시지를 동기식으로 처리하며 수신자가 없거나 응답하지 않으면 메시지는 큐에 보관되지 않고 버려지게 됩니다. 이는 PostMessage와 차별되는 점으로, PostMessage는 비동기 방식으로 큐에 메시지를 보내지만, 수신자가 없어도 큐에 남게 되며, 이후에 처리될 수 있습니다.

따라서 1000번의 메시지를 보내고 수신자가 없다면, 이 메시지들은 저장되지 않고 모두 사라지게 됩니다.

대안: 만약 메시지가 수신되지 않거나 처리되지 않았을 때 저장되기를 원한다면, 큐를 관리하거나 다른 방법(예: 파일 저장, 데이터베이스 등)을 통해 메시지를 로그로 기록하는 방법을 고려할 수 있습니다.

 

 

 

PostMessage와 SendMessage는 모두 Windows 메시지 시스템에서 메시지를 다른 윈도우로 보내는 데 사용되지만, 메시지가 처리되는 방식과 관련된 동작에 차이가 있습니다. 이들 두 방식이 각각 프로세스 종료 시 어떤 영향을 받는지에 대해 설명하겠습니다.

1. PostMessage와 메시지 큐

PostMessage는 메시지를 보내는 비동기 방식입니다. 이 방식은 메시지를 호출한 프로세스와 수신 윈도우의 메시지 큐에 넣어주고, 수신 윈도우는 이 메시지를 나중에 처리할 수 있습니다.

  • 메시지 큐: 메시지가 수신 윈도우의 메시지 큐에 저장됩니다.
  • 프로세스 종료 시:
    • 만약 메시지를 보낸 프로세스가 종료되더라도 메시지는 수신 윈도우의 큐에 남아있습니다.
    • 수신 프로세스가 메시지 큐에서 메시지를 처리하지 않으면, 수신 프로세스가 종료되기 전까지 큐에 남을 수 있습니다.
    • 수신 윈도우가 종료되면, 해당 메시지는 큐에서 사라집니다. 즉, 메시지 큐는 수신 윈도우의 존재와 연관이 있기 때문에, 수신 윈도우가 종료되면 그 메시지는 더 이상 유효하지 않습니다.

따라서 PostMessage를 사용하여 메시지를 보낸 후, 메시지를 보내는 프로세스가 종료되면 그 메시지가 수신자에게 도달할 수 있는지는 수신 윈도우의 상태에 따라 달라집니다. 수신 윈도우가 여전히 실행 중이고 메시지 큐가 남아 있다면, 메시지는 처리됩니다. 그러나 수신 윈도우가 종료되면 그 메시지는 더 이상 처리되지 않습니다.

2. SendMessage와 메시지 전달

SendMessage는 메시지를 보내는 동기 방식입니다. 이 방식은 메시지를 호출한 프로세스가 수신 윈도우의 프로시저에서 메시지를 처리할 때까지 대기하는 방식입니다.

  • 메시지 처리: SendMessage는 메시지가 수신 윈도우에 의해 처리될 때까지 호출한 프로세스가 대기합니다.
  • 프로세스 종료 시:
    • 메시지가 전송된 후 수신 프로세스가 종료되면, SendMessage는 메시지를 처리하지 못하게 됩니다.
    • 수신 윈도우가 종료되면 SendMessage는 메시지를 보냈으나 처리할 수 없게 되며, 대기 중인 호출은 중단되고, 메시지는 소실됩니다. 즉, SendMessage는 수신 프로세스가 종료되면 더 이상 그 메시지를 전달할 수 없으며, 메시지 처리가 이루어지지 않습니다.

요약: 프로세스 종료 시 상황

  • PostMessage:
    • 메시지는 수신 윈도우의 메시지 큐에 저장되며, 수신 윈도우가 실행 중이면 메시지를 처리합니다.
    • 수신 윈도우가 종료되면, 큐에 남아있던 메시지는 사라집니다.
    • 메시지를 보낸 프로세스가 종료되면, 해당 메시지가 수신자의 큐에 영향을 미치지 않습니다.
  • SendMessage:
    • 메시지는 수신 프로세스가 메시지를 처리할 때까지 대기합니다.
    • 수신 프로세스가 종료되면, 메시지는 소실되며 처리되지 않습니다.
    • 메시지를 보낸 프로세스가 종료되면 대기 중이던 호출이 중단되고, 메시지는 더 이상 전달되지 않습니다.

따라서, **PostMessage**를 사용하면 수신 프로세스가 종료되기 전까지 큐에 남아 있을 수 있으나, **SendMessage**는 수신 프로세스가 종료되면 메시지가 처리되지 않고 소실됩니다.

 
 
 
 
 
 
송신 프로세스가 종료될 때 PostMessage와 SendMessage의 동작 차이에 대해서도 중요한 점들이 있습니다. 각각의 방식이 송신 프로세스 종료와 관련해서 어떻게 동작하는지 설명하겠습니다.

1. SendMessage와 송신 프로세스 종료

SendMessage는 동기식 메시지 전달 방식입니다. 즉, 메시지를 보내고 나서 수신 프로세스가 해당 메시지를 처리할 때까지 송신 프로세스는 대기합니다.

  • 송신 프로세스 종료 시:
    • SendMessage를 호출한 프로세스가 메시지를 보내고, 그 후 메시지가 수신 프로세스에 의해 처리되기를 기다립니다.
    • 송신 프로세스가 종료되면, 송신 프로세스가 대기 중인 상태에서 갑자기 종료되면, 해당 메시지는 더 이상 처리되지 않습니다.
    • 송신 프로세스가 종료되면 메시지를 받기 위해 대기하던 쓰레드가 종료되기 때문에, 그 메시지는 전달되지 않거나 소실됩니다.
    • 송신 프로세스가 종료되면, 해당 프로세스의 메시지 큐가 제거되거나 정리되므로, 메시지 처리도 이루어지지 않게 됩니다.
    • 따라서 송신 프로세스가 종료되면 SendMessage를 통해 보낸 메시지는 사라지게 됩니다.

2. PostMessage와 송신 프로세스 종료

PostMessage는 비동기식 메시지 전달 방식으로, 송신 프로세스가 메시지를 큐에 넣고 난 후, 송신 프로세스는 즉시 반환됩니다. 메시지는 수신 프로세스의 큐에 저장되며, 그 큐에서 메시지를 나중에 수신 프로세스가 처리합니다.

  • 송신 프로세스 종료 시:
    • PostMessage는 메시지를 보내고 나서 송신 프로세스가 종료되어도 상관없습니다.
    • PostMessage는 비동기적으로 메시지를 큐에 넣고, 송신 프로세스는 해당 메시지의 처리와 관계없이 즉시 반환되므로, 송신 프로세스의 종료가 메시지 전송에 영향을 미치지 않습니다.
    • 수신 프로세스가 계속 실행 중이라면, 메시지는 수신 프로세스의 메시지 큐에 저장되고 나중에 처리됩니다.
    • 송신 프로세스가 종료되더라도, 메시지는 수신 프로세스가 처리할 때까지 큐에 남아있습니다.
    • 단, 수신 프로세스가 종료되면 큐에서 메시지가 제거되므로, 메시지는 더 이상 처리되지 않습니다.

요약: 송신 프로세스 종료 시 동작 차이

  • SendMessage:
    • 송신 프로세스가 종료되면, 대기 중인 메시지는 처리되지 않고 사라집니다.
    • 송신 프로세스가 종료되면서 메시지 전송 대기가 중단되기 때문에, 해당 메시지가 수신 프로세스에 전달될 수 없습니다.
  • PostMessage:
    • 송신 프로세스가 종료되더라도, 메시지는 수신 프로세스의 큐에 남아 있을 수 있습니다.
    • 송신 프로세스의 종료는 메시지 큐에 이미 저장된 메시지에 영향을 미치지 않으며, 수신 프로세스가 실행 중이라면 메시지를 계속 처리할 수 있습니다.

결론

  • **SendMessage**는 송신 프로세스의 종료가 메시지 처리에 큰 영향을 미칩니다. 송신 프로세스가 종료되면 메시지가 더 이상 전달되지 않거나 처리되지 않습니다.
  • 반면 **PostMessage**는 송신 프로세스가 종료되어도 메시지 처리에 영향을 주지 않으며, 수신 프로세스가 실행 중이라면 메시지를 처리할 수 있습니다.

 

문법적 내용과 동작 원리

다음 코드는 C#에서 비동기 작업을 별도의 스레드에서 실행하는 데 사용됩니다:

_ = Task.Run(async () => await RUN());

구성 요소 분석

  1. Task.Run
    • Task.Run은 비동기 작업을 스레드 풀에서 실행하기 위해 사용됩니다.
    • 일반적으로 CPU 바운드 작업을 스레드 풀로 오프로드하여 UI 스레드를 차단하지 않게 하기 위해 사용됩니다.
    • 반환값은 Task입니다.
  2. 람다 표현식 (async () => await RUN())
    • Task.Run의 매개변수로 비동기 람다 함수가 전달되었습니다.
    • async로 선언된 람다 함수는 비동기 작업을 실행할 수 있으며, await를 통해 다른 비동기 작업(RUN)의 완료를 기다립니다.
  3. await RUN()
    • RUN 메서드는 비동기 메서드입니다. 해당 작업이 완료될 때까지 기다리지만, 비동기 흐름을 유지하므로 호출한 스레드를 차단하지 않습니다.
    • 이 코드에서는 RUN 메서드가 완료될 때까지 비동기적으로 처리됩니다.
  4. _ =
    • 반환된 Task 객체를 변수에 할당하지 않고 무시합니다.
    • 실행 중인 작업을 추적하거나 결과를 사용할 필요가 없을 때 주로 사용됩니다.
    • _는 읽지 않는 변수를 나타내는 C# 표준 컨벤션입니다.

동작 원리

  1. Task.Run의 호출:
    • Task.Run은 스레드 풀의 대기열에 람다 함수(async () => await RUN())를 작업으로 추가합니다.
    • 이 작업은 백그라운드 스레드에서 실행됩니다.
  2. 람다 함수 실행:
    • 스레드 풀에서 작업이 실행되면서 람다 함수가 호출됩니다.
    • 람다 함수는 비동기적으로 RUN()을 호출하고, RUN()이 완료될 때까지 비동기적으로 기다립니다.
  3. 비동기 흐름 유지:
    • await 키워드는 비동기 작업(RUN)의 완료를 기다리되, 호출 스레드를 차단하지 않습니다.
    • RUN()이 완료되면 await 뒤의 코드를 계속 실행합니다.
  4. 결과 처리 없음:
    • Task.Run의 반환값(Task)을 무시했기 때문에 작업 결과를 추적하거나 예외를 처리하지 않습니다.

주의사항

  1. 예외 처리:
    • 무시된 Task에서 발생한 예외는 호출자가 확인하지 않기 때문에 런타임 경고가 발생하거나 추적되지 않을 수 있습니다.
    • 안정성을 위해 예외 처리를 추가하거나 반환된 Task를 추적하는 것이 좋습니다.
  2. 예시:
    _ = Task.Run(async () => {
    try { await RUN(); }
    catch (Exception ex)
    { // 예외 로깅 또는 처리 Console.WriteLine($"Error: {ex.Message}");
    }
    });

  3. UI 컨트롤 접근:
    • 백그라운드 스레드에서 UI 컨트롤을 직접 조작하면 문제가 발생합니다. Invoke 또는 SynchronizationContext를 통해 UI 스레드에서 실행해야 합니다.
  4. 성능 고려:
    • Task.Run은 스레드 풀의 작업자 스레드를 사용하므로, 남용하면 시스템 리소스에 영향을 줄 수 있습니다. IO 바운드 작업이나 짧은 작업의 경우 다른 비동기 메서드로 해결하는 것이 더 효율적입니다.

한 줄 요약

이 코드는 비동기 작업을 백그라운드 스레드에서 실행하여 UI 스레드를 차단하지 않도록 설계된 패턴입니다. Task.Run과 비동기 람다를 결합하여 비동기 작업을 효율적으로 실행합니다.



필자의 사용예)

protected override bool ProcessCmdKey(ref Message message, Keys keyData)
{
    const int WM_KEYDOWN = 0x0100;

     switch (message.Msg)
     {
          case WM_KEYDOWN:
          if (keyData.ToString() == "Space")
          {
          // 비동기 메서드를 실행하되, 기다리지 않고 처리
          _ = Task.Run(async () => await RUN());

          return true; // 키가 처리되었음을 나타냄
          }
          break;
          default:
          break;
     }
     return base.ProcessCmdKey(ref message, keyData);
}



Winsows Form에 DataGridView를 이용한 네이버 부동산 크롤링 데이타 표시(서울시.마포구)

>dotnet new winforms -o NaverWinFrm401
>dotnet add package ServiceStack
>dotnet add package Newtonsoft.Json
>dotnet add package System.Data.SQLite
>dotnet add package ServiceStack.Redis

특징)
1. INFO table에서 데이타를 읽어와서 표시하는것을 원칙
2. INFO table의 데이타는 프로그램시작시에, INFOTMP에 크롤링데이타 저장후에 INFO로 복사

EstateMainFrm.cs
0.02MB

 

Main 메서드와 STAThread 속성

C#에서 비동기 메서드를 동기적으로 호출하는 구조를 포함하고 있습니다. 주로 Task.Run과 await 키워드를 사용하여 비동기 메서드를 처리하는 방식입니다. 이 코드를 더 잘 이해하기 위해 각 부분을 세분화해서 설명드리겠습니다.

1. Main 메서드와 STAThread 속성

  • Main 메서드는 C# 애플리케이션의 진입점(entry point) 입니다.
  • STAThread 속성은 Windows Forms 또는 WPF 애플리케이션에서 메인 스레드가 단일 스레드 아파트(Single-Threaded Apartment, STA) 모드로 실행되도록 지정합니다. 이는 주로 COM 상호 운용성(Interoperability)과 관련이 있습니다. Windows Forms 및 WPF에서 UI 스레드는 STA 모드로 실행되어야 합니다.
// FetchComplexDetailsClass:주로 크롤링작업이 이루어지는 프로그램작업일떄에 쓰이는 호출방법
// FetchComplexDetailsClass:주로 크롤링작업이 이루어지는 프로그램작업일떄에 쓰이는 호출방법
 
[STAThread]
static void Main()
{
     // 비동기 메서드를 호출하는 부분
     Task.Run(async () =>
     {
          FetchComplexDetailsClass frm = new FetchComplexDetailsClass();
          await frm.RUN();
    }).GetAwaiter().GetResult(); // 비동기 작업이 완료될 때까지 대기
}
 

2. Task.Run(async () => { ... })

  • Task.Run은 주어진 델리게이트 또는 메서드를 비동기적으로 실행하기 위해 새로운 태스크를 생성합니다.
  • async () => { ... }는 비동기 메서드를 정의하는 람다 표현식입니다. 이 람다 안에서 비동기 작업을 수행할 수 있습니다.
  • 이 부분은 백그라운드 스레드에서 비동기 작업을 수행하게 합니다. 이 경우 frm.RUN() 메서드를 비동기적으로 호출하려고 합니다.

3. await frm.RUN()

  • await는 비동기 메서드를 기다리게 하며, 메서드가 완료될 때까지 나머지 코드를 실행하지 않습니다.
  • frm.RUN()은 FetchComplexDetailsClass 객체의 RUN이라는 비동기 메서드를 호출합니다.
  • 이 메서드가 완료될 때까지 현재 작업(스레드)이 대기 상태에 들어갑니다. RUN 메서드 내부에서 비동기 작업(예: 파일 I/O, 네트워크 호출 등)을 처리하고 그 결과를 반환할 때까지 기다리게 됩니다.

4. .GetAwaiter().GetResult()

  • .GetAwaiter().GetResult()는 비동기 작업이 완료될 때까지 기다리면서, 비동기 결과를 동기적으로 처리하는 방법입니다.
  • GetAwaiter()는 Task에서 비동기 작업의 상태를 가져옵니다.
  • GetResult()는 비동기 작업이 완료될 때까지 기다리고, 그 결과를 동기적으로 반환합니다. 이 부분에서 예외가 발생하면 AggregateException을 발생시킬 수 있습니다.

5. 전체 흐름 설명

  1. Main 메서드 실행: 프로그램이 시작되면 Main 메서드가 호출됩니다. 여기서는 STAThread 속성 덕분에 단일 스레드 아파트에서 실행됩니다.
  2. Task.Run 실행: Task.Run은 새로운 비동기 작업을 시작합니다. 이 작업은 백그라운드 스레드에서 실행됩니다. async 람다 표현식 안에서 비동기 작업을 호출하고 있습니다.
  3. await frm.RUN(): frm.RUN() 비동기 메서드를 호출하면서, 이 메서드가 완료될 때까지 기다립니다. 이 메서드 내부에서 실제 비동기 작업이 수행됩니다(예를 들어, 네트워크 요청 또는 데이터 처리).
  4. GetAwaiter().GetResult(): await가 내부적으로 비동기 작업을 기다리지만, .GetAwaiter().GetResult()를 통해 해당 작업이 완료될 때까지 현재 스레드를 동기적으로 차단합니다. 즉, 이 코드가 없으면 비동기 메서드의 작업이 완료되기 전에 Main이 종료되었을 수 있기 때문에, 프로그램이 예기치 않게 종료되지 않도록 합니다.
  5. 비동기 메서드 완료 후 종료: frm.RUN() 메서드가 완료되면, Task.Run 내의 비동기 작업이 종료되고, Main 메서드가 종료됩니다. 이제 프로그램이 정상적으로 종료됩니다.

동기와 비동기 결합

  • 비동기 작업은 일반적으로 UI 스레드를 차단하지 않으며, 다른 작업을 처리하는 동안 동시에 실행됩니다.
  • 하지만 GetAwaiter().GetResult()는 비동기 작업을 동기적으로 기다리게 하므로, Main 스레드는 비동기 작업이 완료될 때까지 대기하고, 작업이 완료된 후에 종료됩니다.

6. 왜 이런 방식으로 사용하나요?

  • 비동기 작업을 UI 스레드에서 처리할 때 동기적으로 메인 스레드가 대기하도록 강제하는 경우가 있습니다. 이를 통해 UI를 잠시 멈추게 하지 않고 비동기 작업을 안전하게 처리할 수 있습니다.
  • Task.Run을 사용하면 비동기 작업이 백그라운드에서 실행되므로 UI 스레드의 블로킹을 피할 수 있습니다. 다만, .GetAwaiter().GetResult()를 사용하여 그 결과를 동기적으로 기다리는 방식은 메인 스레드가 작업 완료를 기다리게 만들기 때문에 주로 Main 메서드에서 비동기 작업을 호출할 때 사용됩니다.

결론

  • Task.Run을 통해 비동기 작업을 백그라운드에서 시작하고, await를 사용해 비동기 메서드를 기다립니다.
  • GetAwaiter().GetResult()를 사용하여 비동기 작업이 완료될 때까지 메인 스레드를 동기적으로 대기하게 만듭니다.
  • 이 방식은 주로 콘솔 애플리케이션에서 비동기 작업을 동기적으로 처리하고 싶을 때 사용됩니다.

using System;
using System.Timers;
using System.IO;

class Program
{
    public static void Main()
    {
CHKNM nm = new CHKNM();
        nm.RUN();
    }
}
class CHKNM
{
    string manualDT = "20241201180000";
    DateTime now;

    public void RUN()
    {
        int days = 0;
        now = DateTime.ParseExact(manualDT, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);

while(true)
{
    DateTime manual = now.AddDays(days);

    //0: Sunday, 1: Monday, ..., 6: Saturday
    int dayNumber = (int)manual.DayOfWeek;

    if(dayNumber == 5)
    {
        if(manual.ToString("dd") == "13")
{
    Console.WriteLine(manual.ToString("yyyy-MM-dd HH:mm:ss") + "/" + dayNumber.ToString());
}
    }
    days++;

    if(Convert.ToInt32(manual.ToString("yyyy")) > 2030) break;
}
    }
}

> Dictionary는 기본적으로 키 값이 고유해야 합니다.

C#의 Dictionary는 기본적으로 키 값이 고유해야 하며, 동일한 키를 추가하려고 하면 ArgumentException이 발생합니다. 
키 중복이 발생할 수 있는 시나리오에서 이를 처리하는 방법은 상황에 따라 다릅니다. 
몇 가지 일반적인 해결 방법은 다음과 같습니다:

1. Dictionary의 값에 중복 키 데이터를 저장하기
키 중복을 허용해야 한다면, 값을 컬렉션(예: List 또는 HashSet)으로 변경하여 하나의 키에 여러 값을 저장할 수 있습니다.

2. Lookup 사용
System.Linq의 Lookup 클래스는 중복 키를 자연스럽게 처리할 수 있는 기능을 제공합니다.

3. 커스텀 자료구조로 구현
Dictionary 대신 키 중복을 처리하기 위한 커스텀 자료구조를 사용할 수도 있습니다.

4. 키를 고유하게 변경
중복 키를 허용하지 않는 Dictionary를 사용해야 하는 경우, 키를 고유하게 만들 방법을 고안할 수 있습니다. 
예를 들어, 키에 고유 식별자를 추가하거나 조합하는 방식입니다.

5. 데이터 설계를 검토
만약 중복 키가 자주 발생한다면 데이터 설계의 문제일 수 있습니다. 
데이터를 재구조화하거나 다른 컬렉션 타입(예: List, IGrouping)을 사용하는 것이 더 적합할 수 있습니다.

결론
위 방법들 중 선택은 사용 사례에 따라 다릅니다:

키에 여러 값을 저장해야 한다면 **List를 값으로 사용하거나 Lookup**을 사용하세요.
키를 고유하게 유지하려면 고유 식별자를 추가하세요.
대량의 중복 처리가 빈번하다면 데이터 설계를 다시 고려해보는 것이 좋습니다.

(keys):[아스플로, KR7159010008, 159010, KSQ+KR7159010008]
(RegisterMultiKeyDictionary):[01037/아스플로                                /KR7159010008/159010  ]
(keys):[제로투세븐, KR7159580000, 159580, KSQ+KR7159580000]
(RegisterMultiKeyDictionary):[01038/제로투세븐                              /KR7159580000/159580  ]
(keys):[스킨앤스킨, KR7159910009, 159910, KSQ+KR7159910009]
(RegisterMultiKeyDictionary):[01039/스킨앤스킨                              /KR7159910009/159910  ]
(keys):[NEW, KR7160550000, 160550, KSQ+KR7160550000]
(RegisterMultiKeyDictionary):[01040/NEW                                     /KR7160550000/160550  ]
(keys):[이큐셀, KR7160600003, 160600, KSQ+KR7160600003]
(RegisterMultiKeyDictionary):[01041/이큐셀                                  /KR7160600003/160600  ]
(keys):[싸이맥스, KR7160980009, 160980, KSQ+KR7160980009]
(RegisterMultiKeyDictionary):[01042/싸이맥스                                /KR7160980009/160980  ]
(keys):[THE MIDONG, KR7161570007, 161570, KSQ+KR7161570007]
(RegisterMultiKeyDictionary):[01043/THE MIDONG                              /KR7161570007/161570  ]
(keys):[필옵틱스, KR7161580006, 161580, KSQ+KR7161580006]
(RegisterMultiKeyDictionary):[01044/필옵틱스                                /KR7161580006/161580  ]
(keys):[신스틸, KR7162300008, 162300, KSQ+KR7162300008]
(RegisterMultiKeyDictionary):[01045/신스틸                                  /KR7162300008/162300  ]
(keys):[핑거, KR7163730005, 163730, KSQ+KR7163730005]
(RegisterMultiKeyDictionary):[01046/핑거                                    /KR7163730005/163730  ]
(keys):[이루다, KR7164060006, 164060, KSQ+KR7164060006]
(RegisterMultiKeyDictionary):[01047/이루다                                  /KR7164060006/164060  ]
(keys):[하나머티리얼즈, KR7166090001, 166090, KSQ+KR7166090001]
(RegisterMultiKeyDictionary):[01048/하나머티리얼즈                          /KR7166090001/166090  ]
(keys):[코아스템켐온, KR7166480004, 166480, KSQ+KR7166480004]
(RegisterMultiKeyDictionary):[01049/코아스템켐온                            /KR7166480004/166480  ]

- c#을 이용한 OpenGL 큐빅 control(by.Mouse)

dotnet new console -o openNM

cd openNM

\openNM>dotnet add package OpenTK --version 3.3.3
\openNM>dotnet add package Microsoft.Win32.SystemEvents
\openNM>dotnet add package System.Drawing.Common

.NET Core 또는 .NET 5 이상의 버전에서는 패키지 파일이 프로젝트 폴더 내에 다운로드되지 않고, 일반적으로 글로벌 NuGet 패키지 캐시(기본적으로 %USERPROFILE%\.nuget\packages 경로)에 저장됩니다.

C:\Program Files (x86)>cd %USERPROFILE%

C:\Users\B210145_BK>wsl
root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK# find ./ -name "Open*.dll"
./.nuget/packages/opentk/3.3.3/lib/net20/OpenTK.dll
./.nuget/packages/opentk.audio.openal/4.8.2/lib/netcoreapp3.1/OpenTK.Audio.OpenAL.dll
./.nuget/packages/opentk.compute/4.8.2/lib/netcoreapp3.1/OpenTK.Compute.dll
./.nuget/packages/opentk.core/4.8.2/lib/netstandard2.1/OpenTK.Core.dll
./.nuget/packages/opentk.glcontrol/4.0.1/lib/netcoreapp3.1/OpenTK.GLControl.dll
./.nuget/packages/opentk.graphics/4.8.2/lib/netcoreapp3.1/OpenTK.Graphics.dll
./.nuget/packages/opentk.graphics/4.8.2/lib/netstandard2.1/OpenTK.Graphics.dll
./.nuget/packages/opentk.input/4.8.2/lib/netstandard2.0/OpenTK.Input.dll
./.nuget/packages/opentk.mathematics/4.8.2/lib/netcoreapp3.1/OpenTK.Mathematics.dll
./.nuget/packages/opentk.mathematics/4.8.2/lib/netstandard2.1/OpenTK.Mathematics.dll
./.nuget/packages/opentk.windowing.common/4.8.2/lib/netcoreapp3.1/OpenTK.Windowing.Common.dll
./.nuget/packages/opentk.windowing.common/4.8.2/lib/netstandard2.1/OpenTK.Windowing.Common.dll
./.nuget/packages/opentk.windowing.desktop/4.8.2/lib/netcoreapp3.1/OpenTK.Windowing.Desktop.dll
./.nuget/packages/opentk.windowing.graphicslibraryframework/4.8.2/lib/netcoreapp3.1/OpenTK.Windowing.GraphicsLibraryFramework.dll
root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK#

dotnet build
dotnet run


Program.cs
0.00MB
Program.cs
0.00MB

 

Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임)
Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임)
Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임)



1. .NET SDK 설치(Windows에서는 파일로 설치)
1. .NET SDK 설치(Windows에서는 파일로 설치)
1. .NET SDK 설치(Windows에서는 파일로 설치)
1. .NET SDK 설치(Windows에서는 파일로 설치)

패키지 목록 업데이트 및 필수 패키지 설치
sudo apt update
sudo apt install -y wget apt-transport-https software-properties-common
wget https://packages.microsoft.com/keys/microsoft.asc
sudo apt-key add microsoft.asc
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main" > /etc/apt/sources.list.d/dotnetdev.list'

2. .NET SDK 설치(Windows에서는 파일로 설치)
2. .NET SDK 설치(Windows에서는 파일로 설치)
2. .NET SDK 설치(Windows에서는 파일로 설치)
2. .NET SDK 설치(Windows에서는 파일로 설치)
2. .NET SDK 설치(Windows에서는 파일로 설치)

sudo apt update
sudo apt install -y dotnet-sdk-7.0

설치 확인
dotnet --version


\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker>dotnet new console -o mdiwebrowser

.NET 8.0을(를) 시작합니다.
---------------------
SDK 버전: 8.0.402

원격 분석
---------
.NET 도구는 사용자 환경 개선을 위해 사용량 현황 데이터를 수집합니다. Microsoft에서 데이터를 수집하여 커뮤니티와 공유합니다. 원하는 셸을 사용하여 DOTNET_CLI_TELEMETRY_OPTOUT 환경  변수를 '1' 또는 'true'로 설정하여 원격 분석을 옵트아웃할 수 있습니다.

.NET CLI 도구 원격 분석에 대한 자세한 내용은 https://aka.ms/dotnet-cli-telemetry를 참조하세요.

----------------
ASP.NET Core HTTPS 개발 인증서를 설치했습니다.
인증서를 신뢰하려면 'dotnet dev-certs https --trust'를 실행하세요.
HTTPS에 관한 자세한 정보: https://aka.ms/dotnet-https

----------------
첫 번째 앱 작성: https://aka.ms/dotnet-hello-world
새로운 기능 확인: https://aka.ms/dotnet-whats-new
설명서 살펴보기: https://aka.ms/dotnet-docs
GitHub에서 문제 보고 및 소스 찾기: https://github.com/dotnet/core
사용 가능한 명령을 보려면 'dotnet --help'를 사용하거나 https://aka.ms/dotnet-cli를 방문하세요.
--------------------------------------------------------------------------------------
"콘솔 앱" 템플릿이 성공적으로 생성되었습니다.

생성 후 작업 처리 중...
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj 복원 중:
  복원할 프로젝트를 확인하는 중...
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
  C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj을(를) 110밀리초 동안 복원했습니다.
복원에 성공했습니다.



C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker 디렉터리

2024-09-26  오전 08:08    

          .


2024-09-26  오전 08:08    

          ..


2024-09-26  오전 08:08    

          mdiwebrowser


               0개 파일                   0 바이트
               3개 디렉터리  17,577,447,424 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker>
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MultipleRedisManager.cs(47,17): error CS0246: 'RedisClient' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가
있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MultipleRedisManager.cs(48,10): error CS0246: 'RedisClient' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가
있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\PublicApiNM.cs(229,77): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지
 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\PublicDataApiNM.cs(60,67): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가
있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(23,41): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가
 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(48,59): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가
 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(110,75): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조
가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(161,98): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조
가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj]
    경고 2개
    오류 42개

경과 시간: 00:00:05.13

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet add package Newtonsoft.Json
  복원할 프로젝트를 확인하는 중...
  Writing C:\Users\B210145_BK\AppData\Local\Temp\tmp0oxzu2.tmp
info : X.509 인증서 체인 유효성 검사는 코드 서명에 .NET에서 선택한 기본 신뢰 저장소를 사용합니다.
info : X.509 인증서 체인 유효성 검사는 타임스탬프에 .NET에서 선택한 기본 신뢰 저장소를 사용합니다.
info : 'C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj' 프로젝트에 'Newtonsoft.Json' 패키지에 대한 PackageReference를 추가하는 중입니다.
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/newtonsoft.json/index.json 809밀리초
info :   GET https://www.nuget.org/api/v2/FindPackagesById()?id='Newtonsoft.Json'&semVerLevel=2.0.0
info :   OK https://www.nuget.org/api/v2/FindPackagesById()?id='Newtonsoft.Json'&semVerLevel=2.0.0 434밀리초
warn : NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업을 실행하고 있습니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레 이션하는 것이 좋습니다.
info : C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj의 패키지를 복원하는 중...
info :   GET https://api.nuget.org/v3/vulnerabilities/index.json
info :   OK https://api.nuget.org/v3/vulnerabilities/index.json 279밀리초
info :   GET https://api.nuget.org/v3-vulnerabilities/2024.09.24.23.37.09/vulnerability.base.json
info :   GET https://api.nuget.org/v3-vulnerabilities/2024.09.24.23.37.09/2024.09.25.17.37.11/vulnerability.update.json
info :   OK https://api.nuget.org/v3-vulnerabilities/2024.09.24.23.37.09/vulnerability.base.json 187밀리초
info :   OK https://api.nuget.org/v3-vulnerabilities/2024.09.24.23.37.09/2024.09.25.17.37.11/vulnerability.update.json 410밀리초
info : 'Newtonsoft.Json' 패키지는 'C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj' 프로젝트에 지정된 모든 프레임워크와 호환됩니다.
info : 'Newtonsoft.Json' 패키지 '13.0.3' 버전에 대한 PackageReference가 'C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj' 파일에 추가되었습니다.
info : 자산 파일을 디스크에 쓰는 중입니다. 경로: C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\obj\project.assets.json
log  : C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj을(를) 900밀리초 동안 복원했습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>
dotnet add package Newtonsoft.Json
dotnet add package ServiceStack.Redis
dotnet add package Systehttp://m.Data.SQLite

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet build
  복원할 프로젝트를 확인하는 중...
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
  복원할 모든 프로젝트가 최신 상태입니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
  mdiwebrowser -> C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\mdiwebrowser.dll

빌드했습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
    경고 2개
    오류 0개

경과 시간: 00:00:01.66

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>
 C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser 디렉터리

2024-09-26  오전 08:09    

          .


2024-09-26  오전 08:09    

          ..


2024-09-26  오전 08:09    

          bin


2024-09-26  오전 08:11    

          obj


              34개 파일           1,559,700 바이트
               4개 디렉터리  17,472,671,744 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>mkdir reference

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>cd reference

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference>copy "C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Service*.DLL" .
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\ServiceStack.dll
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\ServiceStack.Interfaces.dll
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\ServiceStack.ServiceInterface.dll
        3개 파일이 복사되었습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference>


C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0 디렉터리

2024-09-11  오후 09:29         1,040,384 ServiceStack.Common.dll
2024-09-11  오후 09:29           425,984 ServiceStack.Interfaces.dll
2024-09-11  오후 09:30           902,144 ServiceStack.Redis.dll
2024-09-11  오후 09:32           760,320 ServiceStack.Text.dll

2024-09-26  오전 08:12    

          .


2024-09-26  오전 08:12    

          ..


2020-04-17  오전 05:38         4,977,744 EntityFramework.dll
2020-04-17  오전 05:39           591,440 EntityFramework.SqlServer.dll
2024-09-26  오전 08:12            21,704 mdiwebrowser.deps.json
2024-09-26  오전 08:12           895,488 mdiwebrowser.dll
2024-09-26  오전 08:12           138,752 mdiwebrowser.exe
2024-09-26  오전 08:12           104,068 mdiwebrowser.pdb
2024-09-26  오전 08:12               268 mdiwebrowser.runtimeconfig.json
2019-11-15  오후 05:36            23,112 Microsoft.Win32.SystemEvents.dll
2023-03-08  오후 04:09           712,464 Newtonsoft.Json.dll
2024-09-26  오전 08:12    

          runtimes


2019-11-15  오후 05:36           181,832 Systehttp://m.CodeDom.dll
2019-11-15  오후 05:37           375,912 Systehttp://m.Configuration.ConfigurationManager.dll
2020-01-18  오전 03:28           267,136 Systehttp://m.Data.SqlClient.dll
2023-06-11  오전 06:02           427,696 Systehttp://m.Data.SQLite.dll
2023-06-11  오전 06:00           206,512 Systehttp://m.Data.SQLite.EF6.dll
2018-09-19  오전 04:38           143,408 Systehttp://m.Drawing.Common.dll
2019-11-15  오후 05:37            17,784 Systehttp://m.Security.Cryptography.ProtectedData.dll
2019-11-15  오후 05:56            92,536 Systehttp://m.Security.Permissions.dll
2019-11-15  오후 05:56            25,976 Systehttp://m.Windows.Extensions.dll
              22개 파일          12,332,664 바이트
               3개 디렉터리  17,472,704,512 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0>

//Usage DLL(Unlimited Version)
//Usage DLL(Unlimited Version)
//Usage DLL(Unlimited Version)
//Usage DLL(Unlimited Version)
//Usage DLL(Unlimited Version)
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference 디렉터리

2024-09-26  오전 08:14    

          .


2024-09-26  오전 08:14    

          ..


2011-06-17  오전 10:16           553,984 ServiceStack.dll
2011-06-17  오전 10:16            33,792 ServiceStack.Interfaces.dll
2011-06-17  오전 10:16            20,480 ServiceStack.ServiceInterface.dll
               3개 파일             608,256 바이트
               2개 디렉터리  17,472,036,864 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference>

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\Data>copy "C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Data\*.sql" .
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Data\CreateDb.sql
        1개 파일이 복사되었습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\Data>dir
 C 드라이브의 볼륨: B210145_BAK
 볼륨 일련 번호: 1C66-FEA7

 C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\Data 디렉터리

2024-09-26  오전 08:17    

          .


2024-09-26  오전 08:17    

          ..


2024-07-22  오후 07:20            15,686 CreateDb.sql
               1개 파일              15,686 바이트
               2개 디렉터리  17,472,454,656 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\Data>

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0>copy "C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Ser*.xml" .
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\ServerInfo.xml
        1개 파일이 복사되었습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0>dir *.xml
 C 드라이브의 볼륨: B210145_BAK
 볼륨 일련 번호: 1C66-FEA7

 C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0 디렉터리

2024-07-31  오후 06:45               475 ServerInfo.xml
               1개 파일                 475 바이트
               0개 디렉터리  17,471,488,000 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet run
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
1. REDIS CONNECT
2. SQLite DATABASE CONNECT
Unhandled exception. System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data\CreateDB.sql'.
   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at Systehttp://m.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at System.IO.StreamReader.ValidateArgsAndOpenPath(String path, Encoding encoding, Int32 bufferSize)
   at Systehttp://m.IO.StreamReader..ctor(String path)
   at mdiwebrowser.MdiResponseFrm.CreateDb() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MdiResponseFrm.cs:line 358
   at mdiwebrowser.MdiResponseFrm.RUN() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MdiResponseFrm.cs:line 62
   at mdiwebrowser.Program.Main() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Program.cs:line 17

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>mkdir Data

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>cd Data

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data>copy "C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Data\*.sql" .
C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver\Data\CreateDb.sql
        1개 파일이 복사되었습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data>dir
 C 드라이브의 볼륨: B210145_BAK
 볼륨 일련 번호: 1C66-FEA7

 C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data 디렉터리

2024-09-26  오전 08:20    

          .


2024-09-26  오전 08:20    

          ..


2024-07-22  오후 07:20            15,686 CreateDb.sql
               1개 파일              15,686 바이트
               2개 디렉터리  17,485,975,552 바이트 남음

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data>
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet run
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
1. REDIS CONNECT
2. SQLite DATABASE CONNECT
3. KRX(TCP) CONNECT SEREVR
--------------------------------------------------
HELP.DEBUG[E4.0].TAIL[E3.0]-----------------------
[2024-09-26 08:20:21]
[0001][A001S]:[00000]
[0002][A001Q]:[00000]
[0003][A002S]:[00000]
[0004][A003S]:[00000]
[0005][A004S]:[00000]
[0006][CA01S]:[00000]
[0007][CA01Q]:[00000]
[0008][IA000]:[00000]
[0009][B901S]:[00000]
[0010][A301S]:[00000]
[0011][B601S]:[00000]
[0012][C001S]:[00000]
[0013][C301S]:[00000]
[0014][R801S]:[00000]
[0015][B501S]:[00000]
[0016][M401S]:[00000]
[0017][A701S]:[00000]
[0018][B901Q]:[00000]
[0019][A301Q]:[00000]
[0020][B601Q]:[00000]
[0021][C001Q]:[00000]
[0022][C301Q]:[00000]
[0023][R801Q]:[00000]
[0024][B501Q]:[00000]
[0025][M401Q]:[00000]
[0026][A701Q]:[00000]
--------------------------------------------------

//SUCCES
//SUCCES
//SUCCES
//SUCCES


//EDIT run.cmd
//EDIT run.cmd
//EDIT run.cmd
//EDIT run.cmd

copy "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\*.DLL" "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0"
dotnet run

//FINAL
//FINAL
//FINAL



C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>run.cmd

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>copy "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\*.DLL" "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0"
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\ServiceStack.dll
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\ServiceStack.Interfaces.dll
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\ServiceStack.ServiceInterface.dll
        3개 파일이 복사되었습니다.

C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet run
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습
니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다.
1. REDIS CONNECT
2. SQLite DATABASE CONNECT
3. KRX(TCP) CONNECT SEREVR
--------------------------------------------------
HELP.DEBUG[E4.0].TAIL[E3.0]-----------------------
[2024-09-26 08:24:14]
[0001][A001S]:[00000]
[0002][A001Q]:[00000]
[0003][A002S]:[00000]
[0004][A003S]:[00000]
[0005][A004S]:[00000]
[0006][CA01S]:[00000]
[0007][CA01Q]:[00000]
[0008][IA000]:[00000]
[0009][B901S]:[00000]
[0010][A301S]:[00000]
[0011][B601S]:[00000]
[0012][C001S]:[00000]
[0013][C301S]:[00000]
[0014][R801S]:[00000]
[0015][B501S]:[00000]
[0016][M401S]:[00000]
[0017][A701S]:[00000]
[0018][B901Q]:[00000]
[0019][A301Q]:[00000]
[0020][B601Q]:[00000]
[0021][C001Q]:[00000]
[0022][C301Q]:[00000]
[0023][R801Q]:[00000]
[0024][B501Q]:[00000]
[0025][M401Q]:[00000]
[0026][A701Q]:[00000]
--------------------------------------------------

+ Recent posts