'Program'에 해당되는 글 71건

  1. 2008.05.29 GEF, Widget 형태의 Figure
  2. 2008.05.29 GEF
  3. 2008.05.09 Eclipse에서 SWT 사용하기. 5
  4. 2008.05.08 WCF 초보자를 위한 자습서
  5. 2008.05.08 WCF 아키텍쳐, 개념
  6. 2008.05.07 Java API Flow
  7. 2008.05.06 이클립스 플러그인 개발 Simple Ftp
  8. 2008.04.17 Visual Studio Setup and Deployment / 비쥬얼 스튜디오 셋업 프로젝트 7
  9. 2008.04.10 EventLog
  10. 2008.04.08 쓰레드에 의한 파일 전송 1

GEF, Widget 형태의 Figure

Program/JAVA 2008. 5. 29. 15:26

이전 포스트의 GEF 예제를 수행 해본 후 드는 생각은..

그렇다면 Draw2D 로 그려지는 Figure 를 일일이 다 그려줘야 하느냐 이다.

그래서 윈도우 형태를 그대로 Figure 로 사용하는 방법에 대해서 알아보았다..

사용자 삽입 이미지

사용자 삽입 이미지

Figure 의 생성자 부분에서 Draw2d 개체를 add 할때 윈도우 개체를 추가해주면 되었다.

이렇게 한다면 적어도 Draw2d 라이브러리에 존재하는 윈도우 개체는 Figure 로 사용할 수 있을 것이다.

흠.. Visual Editor 가 이런식이지 않을까... 짧은 추측 ㅡㅡ;;

'Program > JAVA' 카테고리의 다른 글

GEF  (0) 2008.05.29
Eclipse에서 SWT 사용하기.  (5) 2008.05.09
Java API Flow  (0) 2008.05.07
:

GEF

Program/JAVA 2008. 5. 29. 15:17
Graphical Editing FrameWork

말그대로 그래픽한 에디터를 만드는 프레임 워크이다.

기본 개념에 대해서는 간다한 검색으로 알수 있지만 아래 몇곳의 사이트를 링크한다.

http://www.eclipse.org/gef/reference/GEF%20Tutorial%202005.ppt

http://cafe.naver.com/eclipseplugin.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=36

기본 개념에 대한 이해를 하였다면 아래 예제를 만들어 보길 권유한다.

프랑스 인이 작성한 GEF 예제로서 실제로 많은 기능을 담고 있고 GEF 에 대한 개념을 잡기에 충분하다.

사실 GEF 에 대한 가이드나 예제들이 그리 풍부하지 못하고 이정도의 예제는 사막의 오아시스와 같다 ㅡㅡ^

프랑스 인이 작성하였기에.. 당연 불어..
-0- 하지만 포스트의 맨 아랫부분에 영문 번역된 PDF 파일을 다운로드 할 수 있다.

http://www.psykokwak.com/blog/index.php/?q=Tutorial%3A+GEF

GEF 를 알게 된것은 위지웍 웹 편집기를 RCP 형식으로 만들어 보려 해서 이다.

GEF 에서 wysiwyg text editing 를 제공 한다하는데.. 휴.. 자료 찾는게 이렇게 힘들줄이야;;;

'Program > JAVA' 카테고리의 다른 글

GEF, Widget 형태의 Figure  (0) 2008.05.29
Eclipse에서 SWT 사용하기.  (5) 2008.05.09
Java API Flow  (0) 2008.05.07
:

Eclipse에서 SWT 사용하기.

Program/JAVA 2008. 5. 9. 16:47

SWT ( Standard Wiget Toolkit )

UI를 구성하는 위젯 툴 인듯 하다.
SWT 특징중 하나는 응용프로그램의 UI가 플랫폼(OS) 에 따라 바뀐다는 것이다.(맞게 이해했을래나..)
MS 계열만 다뤄본 나로선 생소한...
막상 예제를 사용해 보니 MFC 정도의 랩핑이 되어 있는 듯 하다..
이하는 "이클립스 실전 플러그인 개발" 이라는 책에 실린 간단한 Hello World 의 윈도우를 생성하는 예제 이다.


프로젝트 경로에 SWT 추가
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

http://archive.eclipse.org/eclipse/downloads/drops/R-3.2.2-200702121330/index.php
SWT Binary and Source 에서 위젯을 다운로드 한다. zip 파일로서 압축을 풀지 않고 저장한다.

이클립스에서 File > Import > Existion Projects into Workspace

사용자 삽입 이미지

Select archive file 에 체크하고 아카이브 파일을 선택한다. 다운로드한 zip 파일을 선택하면 된다.
Projects: org.eclipse.swt 는 이미 추가된 모습이다 아래의 추가 단계를 거쳤을 경우에만 체크박스를 확인할 수 있다.

사용자 삽입 이미지

다운로드한 SWT  파일을 선택한다. 여기서 주의 할 점은 왼쪽의 트리뷰에서 선택했을 경우 적용이 안된다는 접이다.
그림의 아래 부분에 필터를 모든 파일로 설정한 후, 우측의 리스트뷰에서 파일을 선택 하면 된다.
등록이 되면 위의 그림처럼 swt 가 추가되고 체크 후 종료한다.
사용자 삽입 이미지



SWT 를 이용한 Hello World 윈도우 생성하기
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


이클립스에서 Java Project 를 하나 생성하고, Main 을 포함하는 클래스를 생성하자. ( 생략.. 아시리라.. )
해당 프로젝트의 마우스 우클릭 메뉴중 Java Build Path 를 볼 수 있다.
위의 SWT 추가 과정을 성공적으로 마쳤다면 이클립스의 패키지 익스 플로어에 SWT 프로젝트가 추가 된 것을 확인 할 수 있다.
또한 Java Build Path > Projects > Add 를 눌러보면 swt 프로젝트를 추가 할 수 있을 것이다.

사용자 삽입 이미지

여기 까지의 작업이 의미하는 것은 Hello World 를 띄우기 위한 프로젝트에서 SWT라이브러리를 사용가능하다는 의미이다.

아래는 이클립스에서 간단하게 SWT 를 사용해본 것이다.

사용자 삽입 이미지


마치며..
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


닷넷에 익숙한 나로선 노가다라는 느낌이들지만, 적어도 아직 자바나 이클립스에 대해서 모르는 부분이 많으니 좀더 두고 보자..
휴.. 할게 많구나 ㅡㅡ+

'Program > JAVA' 카테고리의 다른 글

GEF  (0) 2008.05.29
Java API Flow  (0) 2008.05.07
이클립스 플러그인 개발 Simple Ftp  (0) 2008.05.06
:

WCF 초보자를 위한 자습서

Program/WCF 2008. 5. 8. 15:14

http://msdn.microsoft.com/ko-kr/library/ms734712.aspx


위 링크는 WCF 초보자를 위한 간단한 WCF 서비스와 클라이언트를 만드는 방법에 대해 제시하고 있다.

각 단계별로 WCF의 기본 구조에 대해 설명하고 있다.

첨부 파일은 위 링크에서 제시한 예제를 만들어 본 것으로 Service.exe와 Client.exe 두개의 파일이 있다.

서비스는 계산기 기능들을 노출하고 있고, 클라이언트는 이 노출된 기능을 사용한다.

서비스를 실행 시킨후, 클라이언트를 실행 시켜보면 확인 할 수 있다.

이제 시작단계에서 이를 다 이해할 순 없지만 된다는게 신기하다.. >.<

'Program > WCF' 카테고리의 다른 글

WCF 아키텍쳐, 개념  (0) 2008.05.08
:

WCF 아키텍쳐, 개념

Program/WCF 2008. 5. 8. 15:08

'Program > WCF' 카테고리의 다른 글

WCF 초보자를 위한 자습서  (0) 2008.05.08
:

Java API Flow

Program/JAVA 2008. 5. 7. 16:02
사용자 삽입 이미지

'Program > JAVA' 카테고리의 다른 글

GEF  (0) 2008.05.29
Eclipse에서 SWT 사용하기.  (5) 2008.05.09
이클립스 플러그인 개발 Simple Ftp  (0) 2008.05.06
:

이클립스 플러그인 개발 Simple Ftp

Program/JAVA 2008. 5. 6. 16:36

PDE를 사용하여 이클립스 플러그인 만드는 방법에 대한 포스트

http://blog.empas.com/eosao1973/21843695

'Program > JAVA' 카테고리의 다른 글

GEF  (0) 2008.05.29
Eclipse에서 SWT 사용하기.  (5) 2008.05.09
Java API Flow  (0) 2008.05.07
:

Visual Studio Setup and Deployment / 비쥬얼 스튜디오 셋업 프로젝트

Program/C# 2008. 4. 17. 13:38

Visual Studio Setup and Deployment

여기저기 포스트를 뒤져보는데 셋업에 관련한 포스트는 없는 듯 하군요..
못찾는 것인지.. 
제가 사용하는 범위 내에서 셋업 프로젝트에 관해 알아보고자 합니다.
중간 중간 링크되는 URL 은 관련사항에 대한 문서입니다. 대부분이 MSDN 일텐데..
입맛에 안맞으신다거나 좀더 깊히 들어가고 싶으신분들은 참조 하시면 좋겠습니다.
혹 궁금한 사항이 있으시다면 글 남겨주시면 답변 드리겠습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

환경 : VS 2008, .Net 2.0

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
프로젝트 생성

MSDN .Net 을 이용하여 설치 패키지를 만드는 방법
http://support.microsoft.com/kb/307353

사용자 삽입 이미지

사용자 삽입 이미지

셋업 프로젝트에서 제공되는 기능들에 대해서는 View 영역에서 확인하실 수 있습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

프로젝트 속성
사용자 삽입 이미지
프로젝트 선택후 속성 창의 모습입니다.
[Localization] 은 기본 English 인데 , 이부분을 Korean 으로 바꿔 줍니다.
이부분을 영어로 했을경우 프로젝트내에 한글 인식이 안됩니다.
[Manufacture] 항목은 회사명으로 배포시 설치되는 경로가 됩니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
파일 포함하기
사용자 삽입 이미지
Application Folder : 응용프로그램 설치 폴더에 포함되는 파일들
User's Desktop : 바탕화면에 포함되는 파일들
User's Programs Menu : 시작 메뉴에 포함되는 파일들

[Application Folder]  항목에서 우클릭 메뉴를 확인하면, 파일을 추가 할 수가 있습니다.
이곳에 추가되는 파일들은 설치 응용프로그램 폴더에 포함됩니다.

바로가기 아이콘 만들기
http://support.microsoft.com/kb/307358/
[Application Folder] 에 포함된 파일중 바로가기 아이콘을 생성하고자 하는 실행 파일을 선택합니다.
실행파일 우클릭 메뉴를 확인하시고, 바로가기 아이콘을 생성합니다.
바로가기 아이콘은 같은 카테고리 안에 생성됩니다.
생성된 아이콘을 마우스 드래그 하여 User's Desktop, User's Programs Menu 항목에 추가 할 수 있습니다.
생성된 아이콘의 프로퍼티를 조정하여 Icon을 설정 하실 수 있습니다.
사용자 삽입 이미지
[Icon] [Browser] 클릭하여 Icon  파일을 연결합니다.

설치 경로 셋팅하기
이상태로 빌드를 한후, 설치를 해보게 되면 설치 되는 폴더의 경로가 Program Files \ Default Company로 설정될 것입니다.
이 경로에 대한 설정은 [Application Folder]의 프로퍼티에서 변경 할 수 있습니다.
사용자 삽입 이미지

DefaultLocation의 경로를 보게되면, [Manufacturer] 이라는 부분이 있는데 이부분이 회사명에 해당되는 곳입니다.
[Manufacturer]에 해당되는 곳에 회사 명을 포함하여 설치 경로를 조정할 수 있습니다.
예> [ProgramFilesfolder]MyCompany\[Productname]

여기까지의 진행만으로도 파일과 바로가기가 포함된 간단한 셋업 파일을 만들 수 있겠군요.


〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

UI Interface
사용자가 응용프로그램을 설치 할 때 보게 되는 다이얼로그의 UI에 해당하는 사항을 설정할 수 있는 부분입니다.
간단하게 메세지를 표현 할 수도 있고, CheckBox 등의 컨트롤을 추가할 수 있습니다.
http://msdn2.microsoft.com/en-us/library/ecaca8zb(VS.80).aspx
사용자 삽입 이미지

트리의 각 항목들의 프로퍼티값을 조정하여 UI를 설정할 수 있습니다. 몇가지만 살펴보면..
[Welcome] CopyrightWarning, WelcomeText 설치 시 첫 페이지에 해당 메세지 들이 표시 됩니다.
[Finished] UpdateText 설치 종료시 표시되는 메세지 입니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
CustomAction

[CustomAction]은 설치 도중 사용자에 의해 행해지는 작업을 의미 합니다.
예를 들어 응용프로그램이 실행 되기 위해서 닷넷 2.0 이 설치 되어 있어야 한다면,
개발자는 배포시에 닷넷 2.0 또한 같이 배포 되길 원할 것입니다.
CustomAction 에는 4개의 카테고리(Install, Commit, Rollback, Uninstall)가 존재합니다.
각 카테고리는 설치 단계를 의미 합니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

사용자 선택에 따른 조건부 설치 설정

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

Condition 라는 속성 값을 통해서 프로그램의 배포시에 특정 파일을 포함 시키거나
혹은 특정 CustomAction 을 행하느냐 하지 않느냐를 결정 할 수 있습니다.
사용자 삽입 이미지
Filesystem 에 두개의 임의로 제작한 실행 파일을 등록 하였습니다.

사용자 삽입 이미지

[User Interface] [Start] 우클릭 메뉴에서 2개의 라디오 버튼을 포함하는 다이얼로그를 추가 합니다.
다이얼로그를 Welcome 항목 밑에 위치 시킵니다.
<참조> 모든 사용자 지정 대화 상자는 설치 폴더 대화 상자 또는 웹 설치 프로젝트의 설치 주소 대화 상자 앞에 와야 합니다.

사용자 삽입 이미지

추가된 다이얼로그의 프로퍼티 창 입니다.
두개의 라디오 버튼중 1번째 버튼은 Yes 항목  2번째 버튼은 No 항목으로 설정 하였습니다.
ButtonProperty 프로퍼티의 BUTTON2  값은 변수와 같은 개념으로 이 값을 통해 선택된 라디오 버튼을 확인합니다.
사용자 삽입 이미지

FileSystem 에서 추가한 exe 실행 파일을 Custom Actions 에서 Actions 으로 추가합니다.
추가된 실행 파일의 프로퍼티 창을 보면 Condition 항목을 확인 할 수 있습니다.
사용자 삽입 이미지

Arguments 항목을 /Install 로 설정합니다.
Conditions 항목을 BUTTON2=1 로 설정합니다. 눈치 채셨겠지만 추가된 다이얼로그의 버튼 항목입니다.
BUTTON2 항목이 1값으로 선택되었을 경우 작동 합니다.
그냥 조건문이라 생각하시면 되겠군요
InstallerClass 항목을 False 로 설정 합니다.


사용자 삽입 이미지

Yes 선택시 CustomAction.exe 가 실행되고, No를 선택시 무시 됩니다.
이처럼 사용자의 선택에 따라 Custom Action을 지정할 수 있지만, 또한 응용프로그램에 포함되는 파일을 설치시 추가 제거 할 수 있습니다.
앞전에 FileSystem 에서 추가한 Setup_Application.exe 의 Condition 항목에 BUTTON2=1 이라고 설정하였다면
No를 선택시 CustomAction.exe가 설치 되지 않을 뿐만아니라
설치가 종료되고 해당 폴더를 확인하면 Setup_Application.exe가 포함되지 않았음을 알 수 있습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
VerSionNT

http://www.tarma.com/support/tin3/0100-using/0035-symbols/0200-variables/versionnt.htm

조건부 설치 항목에서 Condition 속성에 대해서 알아 봤습니다.
Condition 속성을 이용하면 운영체제에 따른 조건부 설치를 진행 할 수 있습니다.
예를 들어 Condition 속성에  VersionNT>=500 값을 설정 합니다.
VersionNT 는 OS 의 버젼에 따른 값으로 아래와 같습니다.
사용자 삽입 이미지

이 표를 볼때 500 이상이라는 값은 Windows 2000 이상의 버젼을 의미 하겠군요

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
.Net의 재배포, 시작조건
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

배포하려는 프로그램이 .Net의 특정 버젼을 필요로 한다면 개발자는 .Net을  같이 배포 하길 원할 것입니다.
Microsoft Data Access Componets 를 이용하여 시작 조건을 검사 .Net 을 배포 할 수 있습니다.

사용자 삽입 이미지

셋업 프로젝트의 우클릭 메뉴 속성 창을 열어 보면 우측 하단에 Prerequisites 을 발견 할 수 있습니다.
이는 셋업이 진행 되기 전에 필요한 MDAC 를 추가 하는 창으로거 필요한 컴포넌트에 체크를 하시면 됩니다.

체크 박스 리스트 아래 쪽으로 컴포넌트를 다운로드 하는 방법에 대해서 지정할 수 있는데요.
웹을 통해서, 로컬 경로를 통해서 등... 3가지 경우를 선택 할 수 있습니다.

2번째에 위치한 "응용프로그램과 같은 로컬 경로"를 선택 하였습니다.

이렇게 설정하신후 빌드를 하게 되면 셋업 파일 이외에 시작조건에 필요한 컴포넌트들이 포함된 폴더가 생성이 되는군요.

사실 Vista에서 .Net 3.0 은 Windows 기능으로 포함 되어 있어.. 실행 파일 형식으로 제공되는 .Net의 설치는 할 수 없었습니다.
설치를 시도 할경우 경고 메세지를 띄우게 되죠.
빌드후 생성된 파일은 EnableDotNet 이라는 파일이군요. 이 파일은 실제적으로 닷넷을 설치 하는 것이 아니라.
플렛폼에서 닷넷을 사용할 수 있도록.. 설치가 필요하면 설치를.. 혹은 기능의 추가를.. 해주나 봅니다.
그래서!! Vista 에서 무리 없이 동작하는 군요.

현재 MDAC 는 2.1 sp1 버젼까지 업데이트 되어 있군요.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
시작조건 검사

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp
배포의 시작시에 특정 프로그램의 설치 여부를 확인 할 수 있다면, 이를 확인하여 프로그램을 배포할 수가 있습니다.
WMP11 을 같이 배포 해야 했기에 이에 대해서 알아 보도록 하겠습니다.
[보기][시작조건] 을 클릭 하면 시작 조건 창을 열 수 있습니다.
사용자 삽입 이미지

팝업 메뉴를 보면 파일, 레지스트리, 윈도우 인스톨러, 닷넷, 서비스 등의 시작 조건을 검사 할 수 있습니다.
레지스트리 시작조건을 추가 해보면 [Search Target Machine]  [Luanch Conditions] 에 각각 레스스트리 탐색과, 시작 조건노드가 생성 됩니다.
말그대로 레지스트리 탐색은 레지스트리내 특정 키 값을 할당하고 프로퍼티화 합니다.
생성된 컨디션은 이 프로퍼티의 값을 비교 하여 특정 작업을 시행합니다.

WMP11의 버전을 확인 하여 없을 경우 설치 하는 작업을 진행 해보면..

사용자 삽입 이미지
Root 의 vsdrrHKLM 은 HKEY_LOCAL_MACHINE 를 뜻한다.
RegKey에 검색할 키 값을 채워준다.
Value 에 레지스트리 이름을 준다.
Property 는 외부로 노출되는 변수와 같은 개념으로 특정한 이름을 명명한다.
사용자 삽입 이미지
생선된 컨디션의 Condition 에 방금 생성한 레지스트리 탐색의 프로퍼티 값을 주고 값을 비교합니다.
"11,0,5721,5145"는 필자가 넣은 값으로 WMP11의 XP버젼의 레지스트리 값입니다.
위 조건을 만족하지 않는 경우에 Message 항목을 출력하고 InstallUrl의 경로를 실행합니다.
InstallUrl에 필자는 상대 경로를 주었는데.. 위 폴더는 빌드 Release 에 포함되어 있습니다.
CD 로 배포시에 이런 방법이 유용하고, 실제로 유효한 Web 주소를 주어도 해당 웹페이지를 실행 시켜 줍니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
파일 형식

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

배포 되는 실행파일에 연결되는 문서 형식을 지정하는 곳입니다.
예를 들어 .hwp 파일을 클릭하면 한글이 실행되듯이..

사용자 삽입 이미지
우측에 [FileType on Target Marchine]의 우클릭 메뉴로 파일 타입을 생성 할 수 있습니다.
좌측은 생성된 파일 타입의 프로퍼티 창입니다.
Extension 란에 확장자를 넣어 주시면 되구요, 세미콜론(;)을 이용하여 여러개를 지정할 수 있습니다.

참고 파일 형식은 설치된 실행 파일 하나에만 연결할 수 있습니다.
두 개 이상의 실행 파일을 파일 형식과 연결하려면 먼저 각 실행 파일에 대한 조건을 지정하여 지정된 설치에 대해 하나만 설치되도록 해야 합니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
마치며..

제가 직접 해보면서 작성한 포스트라 순서가 순차적이지 않을 수가 있습니다. 이해를 ^^;;
레지스트리 편집기에 대해선 알아보지 않았군요. 사용하진 않았지만 특별히 어려운 사항은 없으리라 생각합니다.
포스트중 제가 잘못 알고 있거나 놓친 부분이 있다면 댓글을 남겨주시면 감사하겠습니다

'Program > C#' 카테고리의 다른 글

EventLog  (0) 2008.04.10
네트워크 드라이브  (0) 2008.04.02
USB 및 하드웨어 인식  (0) 2008.04.01
:

EventLog

Program/C# 2008. 4. 10. 11:46
프로그램의 런타임시에 어찌 돌아가는지 혹은 문제는 없는지 보통 Log 파일을 기록합니다.
무식하게 텍스트 파일에 때려 넣었었는데 아래와 같은게 있네요..
사용법은 간단합니다. 자세한 사항에 대해서는 귀찮아서 조사 안해봤네요...
MSDN 긁어왔습니다 -0-;

──────────────────────────────────────────────────

간단한 사용법

string 타입의 Source 와 LogName 이 필요합니다.

// Source 를 생성합니다.
if (!System.Diagnostics.EventLog.SourceExists("Source"))
                    System.Diagnostics.EventLog.CreateEventSource("LogName", ""Source");

// 이벤트를 기록합니다.
System.Diagnostics.EventLog.WriteEntry(LogFileName, Msg);
WriteEntry 함수는 여러 가지로 오버라이드되어 있군요.. 입맛에 맞게 사용하시면 될 것 같습니다.

──────────────────────────────────────────────────

비스타 기준  [제어판] [관리도구] [이벤트뷰어]
왼쪽 트리에 보시면 LogName 라고 확인 하실수 있을 겁니다.
사용자 삽입 이미지


──────────────────────────────────────────────────

EventLog 클래스

스레드로부터 안전한 방식

이 형식의 모든 public static(Visual Basic에서는 Shared) 멤버는 스레드로부터 안전합니다. 하지만 인스턴스 멤버는 스레드로부터 안전하지 않습니다.

설명

EventLog를 사용하면 중요한 소프트웨어 또는 하드웨어 이벤트 정보가 기록되어 있는 Windows 2000 이벤트 로그에 액세스하거나 사용자 지정할 수 있습니다. 예를 들어, EventLog를 사용하여 기존 로그를 읽고, 로그에 엔트리를 쓰고, 이벤트 소스를 만들거나 제거하고, 로그를 삭제하고, 로그 엔트리에 응답할 수 있습니다. 또한 이벤트 소스를 만들 때 새로운 로그를 만들 수도 있습니다.

CreateEventSource를 호출할 때 지정한 로그가 컴퓨터에 없으면 사용자 지정 로그가 새로 만들어지고 응용 프로그램이 해당 로그의 소스로 등록됩니다. 따라서 EventLog 클래스를 사용하면 적절한 액세스 권한이 있는 이벤트 로그에서 엔트리를 쓰거나 읽을 수 있습니다.

참고   보안 로그는 읽기 전용입니다.

이벤트 로그에 쓸 경우 Source 이벤트를 지정하거나 만들어야 합니다. Source 는 이벤트 로그에 응용 프로그램을 유효한 엔트리 소스로 등록합니다. Source를 사용하면 한 번에 하나의 로그에만 쓸 수 있습니다. Source 에는 여러 가지 문자열을 사용할 수 있지만 시스템에 있는 다른 소스와는 다른 이름을 사용해야 합니다. 대개 소스에는 응용 프로그램 이름 또는 다른 특정 문자열이 사용됩니다. 중복된 Source 값을 만들려고 하면 예외가 throw됩니다. 그러나 하나의 이벤트 로그에 여러 개의 소스를 연결할 수 있습니다.

로그를 읽으려면 EventLogLog 이름 및 MachineName (서버 컴퓨터 이름)을 지정합니다. 소스는 로그에 기록하는 경우에만 필요하기 때문에 Source를 지정할 필요가 없습니다. Entries 멤버는 자동으로 엔트리의 이벤트 로그 목록으로 채워집니다.

참고    Log/ MachineName 쌍을 지정하여 로그에 연결하는 경우 MachineName을 지정할 필요가 없습니다. MachineName을 지정하지 않으면 기본적으로 로컬 컴퓨터(".")가 지정됩니다.

이벤트 로그에 쓸 때 message 매개 변수와 함께 보낼 정보 형식을 지정할 수 있습니다. 메시지를 보내는 것 외에 메시지가 오류, 경고 또는 정보 엔트리 형식인지 여부를 나타내는 EventLogEntryType을 보낼 수 있습니다. 또한 응용 프로그램 정의 eventIdcategory 매개 변수를 지정하여 이벤트 뷰어의 형식 및 범주 열에 표시할 수 있습니다. 그리고 지정한 이벤트에 추가 정보를 연결하는 경우 이벤트 엔트리에 이진 데이터를 첨부할 수도 있습니다.

EventLog 클래스는 개별 이벤트 로그 및 해당 엔트리에 대한 액세스 뿐만 아니라 모든 이벤트 로그 컬렉션에 대한 액세스도 제공합니다. EventLog의 정적(Visual Basic에서는 Shared) 멤버를 사용하여 로그를 삭제하고, 로그 목록을 가져오고, 소스를 만들거나 삭제하고, 컴퓨터에 특정 소스가 이미 포함되어 있는지 여부를 확인할 수 있습니다.

Windows 2000에는 응용 프로그램, 시스템 및 보안의 3가지 기본 로그가 있습니다. 다른 응용 프로그램이나 Active Directory와 같은 서비스가 설치되어 있으면 이벤트 로그가 더 있을 수 있습니다. EventLog를 사용하여 서버의 이벤트 뷰어를 통해 볼 수 있는 사용자 지정 이벤트 로그를 만들 수 있습니다.

이벤트 로그에 쓰는 경우 디스크 공간, 프로세서 시간 및 기타 시스템 리소스가 사용됩니다. 따라서 필수 정보만 기록해야 합니다. 또한 성능에 좋지 않은 영향을 주지 않도록 기본 코드 경로 대신 오류 경로에 이벤트 로그 호출을 배치하는 것이 좋습니다.

EventLog 인스턴스의 초기 속성 값 목록을 보려면 EventLog 생성자를 참조하십시오.

:

쓰레드에 의한 파일 전송

Program/SilverLite | WPF 2008. 4. 8. 09:48

쓰레드에 의한 파일 전송

환경 : VS2008, WPF 프로젝트


내용 : 쓰레드를 사용하여 내트워크 내의 원격지에 파일을 전송한다.
파일 전송 상황에 대한 ProgressBar를 갱신한다.


파일 전송
우선 알아야 할것은 파일의 전송량의 정보를 어떻게 알 것인가 이다.
FileStream 클래스를 이용해 보자

사용자 삽입 이미지

여기서 Info는 개인적으로 정의한 구조체로 복사 원본 파일명과 대상 경로를 가지고 있다.
두개의 파일 스트림을 정의하고, 버퍼를 생성한다.
버퍼의 단위만큼 파일을 기록하고 이 정보를 통해 현재 진행 상황을 알 수 있을 것이다.

사용자 삽입 이미지

좀 더 꼼꼼한 개발자라면 Try Catch Finally를 통해 오류 상황에 대한 처리를 잊지 않을 것이다.
사용자 삽입 이미지


왜 쓰레드를 사용하였는가?
용량이 큰 파일을 전송해보았다면, 해당 응용프로그램은 정지 상태가 된다.
이 시점에서 UI의 변경이나 다른 작업을 시도한다면, 응용프로그램은 응답없음 상태가 될 것이다.
이후에 설명하겠지만 Progressbar에 작업 상황을 표현 하는 것 또한 쉽지 않을 것이다.

쓰레드를 사용하기 위해서 우선, 쓰레드에 대한 이해가 필요하다.
쓰레드를 사용함으로서 생기는 문제점들에 대해서 고려되어야 할 것이다.

다음 글은 네이버 블로그 muduri07님의 포스트에 이해 대한 자료가 잘 정리되어 있다
http://blog.naver.com/muduri07?Redirect=Log&logNo=130006369226
다른 주의 사항들과 비롯하여 쓰레드는 최소단위의 오퍼레이션이어야 한다는 것을
명심하기 바랍니다.

쓰레드에 대한 이해가 되었다면 다음으로 WPF 에서의 쓰레드에 대한 이해가 필요하다.
MSDN "발송자를 사용하여 응답 성능이 뛰어난 응용 프로그램 작성" 이라는 포스트이다.
http://msdn2.microsoft.com/ko-kr/magazine/cc163328.aspx

내용을 요약하자면, UI들은  DispatcherObject 를 상속받아 Dispatcher(발송자)를 보유하고 있다.
이러한 발송자들은 메세지 처리 및 기타의 작업들을 진행하는 역할을 한다.
이러한 역할이 VerifyAccess, CheckAccess 다.
DispatcherObject 를 상속받은 개체는 UI쓰레드가 아닌 곳에서 호출될때 에러를 발생한다.
발송자의 Invoke, BeginInvoke 매서드를 통해서 이 상황을 해결한다.
또한 BackgroundWorker를 이용할 수 있다.

한마디로 UI 개체들은 자신이 속한 쓰레드가 아닌 다른 쓰레드 에서 호출할때 에러가 발생하고, 이 문제를 해결하기 위한 방법에 대한 포스트 이다.

실제 적으로 쓰레드를 생성하는 것은 간단하다.
이 둘의 네임스페이스가 필요 할 것이다.

using System.Windows.Threading;
using System.Threading;

Thread trd = new Thread(new ThreadStart(FileCopyThread));
trd.Start();

Thread 클래스는 생성자 파라미터로 ThreadStart 라는 대리자(delegate)를 요한다.
쓰레드의 사용에서 대리자는 실과 바늘과 같은 관계로서 쓰레드의 진입 시점이 되는 매서드를 제공한다.
대라자는 과거 C의 경우의 매서드 포인터와 같은 개념으로 이해하고 있다.
매서드를 지칭하고 있는 대리자는 대리자의 사용으로 매서드를 호출한다.

위 코드는 ThreadStart라는 대리자를 통해 FileCopyThread 라는 매서드를 호출 하고 있고,
ThreadStart 는 프레임 워크에서 제공되는 대리자 이다.

FileCopyThread 매서드는 앞부분에서 설명한 파일의 복사 작업을 진행하게 될 것이다.

지금까지 내용을 살펴 보면 쓰레드를 생성하였고, 이러한 쓰레드를 통해 파일 전송을 진행한다.
다음으로 보아야 할 것은 파일 전송 상황에 대한 ProgressBar의 갱신이다.

ProgressBar의 갱신 또한 스레드로 처리되어야 한다.
파일의 전송과 ProgressBar의 갱신이 같은 스레드내에 존재한다면..
파일이 전송되는 도중에는 Progressbar를 갱신하지 못할 것이기 때문이다.
하지만 이 문제에 대한 해결은 앞부분에 설명하였다.
사용자 삽입 이미지

FilecopyThread 매서드에 대해 살펴보자
Dispatcher.Invoke(DispatcherPriority.Normal, _pgsSetting, (int)(SourceFile.Length / BUFFER));
Invoke 매서드는 우선순위, 대리자, 대라자에 전달된 파라미터 들을 인자로 가진다.
이 매서드는 _pgsSetting 라는 대리자를 호출하여 int 값을 파라미터로 전달 하고 있다.

_pgsSeetting 라는 대리자를 정의 하는 부분이다.

delegate void DG_SetProgress(int max);
private void SetProgress(int max)
{
progressFile.Value = 0;
progressFile.Minimum = 0;
progressFile.Maximum = max;
}

_pgsSetting = new DG_SetProgress(SetProgress);

SetProgress 매서드는 progressFile 이라는 프로그레스바를 호출하고있다.
아래는 프로그래스바의 상태를 갱신하는 부분이다.
DG_RefreshProgress _pgsRefresh;
private void RefreshProgress()
        {
            progressFile.Value += 1;
            progressTotal.Value += 1;
        }

이렇게 Invoke 매서드를 통해 새로운 스레드에서 프로그래스의 값을 변경한다.

지금가지의 내용을 요약한다면 메인 윈도우에는 프로그레스 바가 놓여있다.
파일을 전송 명령이 시작되면 스레드를 통해 파일의 전송이 진행된다.
이 스레드는 파일 전송도중 진행상황을 메인 윈도우의 프로그레스 바에 표현 하는데,
Dispatcher.Invoke 매서드를 통해 새로운 스레드로서 동작하게 된다.

'Program > SilverLite | WPF' 카테고리의 다른 글

Resource Dictionary  (0) 2008.04.01
폴더/ 디렉토리 탐색기/브라부져 FolderBrowser  (0) 2008.04.01
SilverLite  (0) 2008.01.16
: