본문 바로가기

프로그래밍/개발일지20

Printer 통제 방식(1) 사내 보안솔루션 운영 중  워터마크 또는 출력물 통제 시 버그 가 자주 발생 해 원인을 분석하고, 해당 기능에 대한 이해도를 높이기 위해 보안 솔루션이 Printer 통제하는 방식에 대해 공부 하고 간단한 프로그램 제작을 해보려고 한다. Printer 통제먼저 프린터 출력 동작 방법에 대해 정리 후,  프린터 통제 방식 3가지 프린터 스풀러 모니터링, 프린터 드라이버 모니터링,애플리케이션 모니터링에 대해 예제 코드를 작성하려고한다.  프린터 출력 동작 기본적인 동작은 아래와 같이 동작한다. 1. 애플리케이션 출력시작2. 출력 데이터 GDI 데이터 변환3. GDI 객체는 Emf 형식의 특정 출력 형태 데이터 생성후 프린터 드라이버에 전달4. 프린터 드라이버는 PS 또는 PCL 형식에 맞게 변환5. 변환된 .. 2024. 9. 28.
UTC 변경 시 시간 처리 프로그램 내에서 컴퓨터의 시간으로 파일을 작성하거나, 로그를 기록한다.  사용자가 컴퓨터 시간을 수동적으로 변경하거나 UTC를 바꾸면 어떻게 동작 할까? 시간 변경 이 코드를 실행 하고 컴퓨터 시간을 바꿔보자. static void Main() { while (true) { Thread.Sleep(1000); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH-mm")); } } 정상적으로 시간이 바뀐 것을 확인 할 수 있다. UTC 변경  코드를 실행 한 상태로 UTC를 사모아(UTC + 13:00) 으로 변경 하였다 컴퓨터 시간은 변경 되었으나, 프로그램에서 출력.. 2024. 5. 17.
ZeroMq (1) C# 현재 담당하고 있는 제품이 ZeroMq로 통신하기 때문에 해당 내용을 공부하고 기록한다. ZeroMq ? Zeromq는 분산/동시성 응용 프로그램에서 사용하도록 개발된 고성능 메시지 라이브러리 이다. Mq는 프로그램 인스턴스 또는 프로세스가 데이터를 서로 교환할때 사용하는 방법이다. 이때 데이터 교환시 시스템이 관리하는 메시지 큐를 이용한다. ZeroMq는 메시지 큐를 제공하지만 메시지 지향 미들웨어와 달리 전용 메시지 브로커 없이 동작이 가능하다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서의 데이터 송수신을 이야기한다. 정리하자면 프로그램을 통하여 사용할수 있는 단순한 메시징 라이브러리 이다. 기본적으로 메시지 시스템을 빠르게 만들수 있는 소켓 인터페이스를 제공한다. .. 2023. 4. 20.
C# Dynamic var 를 활용해서 개발을 하다보니 실제로 클래스의 멤버필드를 알고 있어도 알고 있어도 컴파일러에 의해 값이 결정되니 다른곳에서 접근할때 정의되어 있지않다고 빌드 전 부터 에러가 발생하였다. 그래서 인터넷을 검색 하다보니 Dynamic 이라는 키워드에 대해 알게되어 해당 내용을 정리해두고 기록해둔다.Dynamic ? 프로그래밍 언어는, 타입을 구분하는 방식으로, 컴파일시 Tpye을 확인하는 Static Language 와 런타임시 Type을 판별하는 Dynamic Language로 구분 할 수 있다. C# 기본적으로 Static Language 속하지만  C# 4.0 에서는 DLR 를 추 가함으로써 Dynamic Language 가 갖는 기능을 언어와 Framework에 수용하였다. dynamic 키워드.. 2023. 4. 20.
C# Anonymous types 오늘 API 반환 부분을 보고 있었는데 return new { a = false, result = ""} 코드가 있어서 검색해보니Anonymous types 문법이고 다양하게 사용한다고 나와있어 해당 내용을 공부하고 정리 해둔다. Anonymous types ?한국어로 익명 타입이라고 이야기하며, C# 3.0 도입된 문법으로 클래스를 미리 정의하지 않고 사용 할 수 있습니다. 특징으로는 읽기전용 (GET만 지원) , 변수에 할당할때에는 var 타입을 사용하며,  new { } 방식으로 사용합니다. 익명 타입으로 변수를 선언하는 경우 변수 초기화 값을 기반으로 컴파일러가 변수의 타입을 자동으로 결정합니다. 예 var str = new {resason = "tktktktk",  success =true}  .. 2023. 4. 19.
Winform 최소화 전 사이즈 저장 윈도우 최소화 상태에서 닫기 버튼을 눌러 종료 후 재실행시 기존 윈도우 창 사이즈가 아닌 기본 설정된 크기로 실행되는것을 확인했는데 분석을 해보니 종료시에만 해당 크기를 저장하는 로직으로 되어있었다. 로직 자체는 문제가 없으나  최소화 상태에서 크기와 위치를 구하면 위치가 - 값으로 나오는것을 확인 할 수 있다.  값을 토대로 그릴수 없으니 기본 설정된 크기로 나오는 것이였다.  해당 내용은 나중에 개선이 필요 할 수 있기에  간단한 샘플을 만들고 기록 해둔다. PS기록을 해두고 집에와서 찾아보니  Resize 이벤트시 해당 windowstate 가 최소화 된건지 확인하여 사이즈를  저장 할때는 이미 사이즈가 최소화된 상황의 크기라 최소화되기전에 크기가 아니다. ResizeBegin 이벤트는 사용자가 사.. 2023. 4. 18.
C# Nlog 로깅 시간 + 용량 로테이션 현재 회사 제품은 Nlog로 용량별 아카이빙 방식의로 로깅을 하고있습니다. 요번에 로그 수집 기능 구현 시  level 별로 수집 하는 로그의 기간이 달라져 용량으로만 아키이빙 되어있는것을  시간 특정기간 + 용량으로 변경이 필요해   Nlog에 대해 조사하고 정리하겠습니다.  시간 + 용량을 선택한 이유는 1주일간 로그가 너무 많이쌓이면 포맷팅된 텍스트파일이라고 해도 50mb가 넘어 갈 경우에 가독성이 떨어지기 때문에 이렇게 결정하였습니다.Nlog  콘솔, 파일, 원격지 로그 전송 등 다양한 형태의 출력을 지원하며 로그의 포맷도 간편하게 지정할 수 있는 로그 라이브러리 입니다.  Nuget을 통해 간편하게 설치할수 있으며, 3가지 형태의 환경설정을 지원합니다. 첫번째로는 NLog.config xml 형.. 2023. 4. 10.
현재 동작중인 프로세스 명령줄 가져오기 C# 회사에서 현재 동작중인 프로세스들의 정보를 가져오는 기능을 개발하고있는데 그중 프로세스의 Command를 가져오는 부분이 있는데 .NET Process 클래스에서는 해당 정보를 가지고 있지 않아 해당 방법에 대해 조사하고 기록한다. 크게 두가지 방법이 있다. 첫번째로는 WMI 를 사용해서 가져오는 방법, 두번째 방법은 win32 api를 사용해서 가져오는 방법이다. WMI는 속도가 상대적으로 느리지만, 간단하게 사용 할 수 있다. win32 api를 사용할 경우 상대적으로 속도는 빠르지만 복잡하다. WMI 사용하여 명령줄 가져오기 Process.GetProcesses() 사용해서 프로세스 리스트를 받아와 Win32_process 조건문에 프로세스 아이디를 넣주고 해당 정보를 받아온다. 정보를 수집할려는 .. 2023. 4. 6.