2015년 3월 31일 화요일

C# WinForm 프로그램의 실행 경로 알아내기

프로그램이 실행될때, 그 프로그램이 어디서 실행되고 있는지 알아 낸다.

1) Application.StartupPath
2) System.Environment.CurrentDirectory
3) System.IO.Directory.GetCurrentDirectory()
4) AppDomain.CurrentDomain.BaseDirectory

이 4가지가 주로 사용되는데, (1)은 WinForm 에서만 사용가능하다.


이것은 WinForm 에서 체크한 값이다.
보다시피 (1)(2)(3) 은 동일한 결과 값을 보여 주며, (4) 는 값 자체는 같지만 끝에 "\" 가 더 붙어 있으니 주의 해야 한다.

2015년 3월 30일 월요일

Windows 원격접속에서 컴퓨터 끄기.

원격 접속으로 컴퓨터를 쓰다 작업을 마치면 컴퓨터를 꺼야한다.
하지만...


원격접속 상태에서는 "로그오프, 연결끊기, 잠금" 만 가능할 뿐 "종료" 버튼이 나타나지 않는다.

원격접속이 기본적으로 서버에서 사용되는 기능이다보니, 실수로 종료시켜 버리는걸 방지하기 위함인것 같은데... 어쨌든, 종료하는것이 가능하다.


"시작" 버튼을 클릭해서 나오는 메뉴에 보면 "Windows 보안" 이라는 탭이 있는데, 이걸 글릭하면...


이렇게 관리화면이 나오는데, 이 때, 오른쪽하단에 있는 종료 버튼을 클릭하면 종료 시킬수 있다.


종료버튼의 오른쪽에 있는 옵션 버튼을 클릭시 "재시작" 도 가능하다.
보통은 이렇게 종료를 시켰는데...

더 간단한 방법이 있었다.


그냥 원격접속을 열고 있는 상태에서, "Alt+F4" 를 눌러 준다.


그럽 이렇게 "Windows 종료" 창이 뜬다.


여기서 "시스템 종료" 를 선택하면 간단히 컴퓨터를 끌수 있다.
이렇게 간단한데, 이걸 몰랐네...


2015년 3월 27일 금요일

C# Web "최대 요청 길이를 초과했습니다." 라고 나오면, 파일 업로드 용량을 확대한다.

웹으로 파일을 업로드 할때, 가끔 "최대 요청 길이를 초과했습니다." 라고 오류가 뜬다.



이것은 Post 값이 지정값을 초과 할때 나는 오류이므로 Reqeust 허용 크기를 늘려 주면된다.


"Web.config" 파일을 수정하면 되는데...


<system.web> 하위에 <httpRuntime> 에 "maxRequestLength" 속성을 지정하면 된다.
이미 있다면 값을 수정하면 되고, 만약 없다면 추가해 준다.

<httpRuntime  maxRequestLength="52100" />

이런식으로 지정하면되는데, KByte 단위이므로 52100 이면 최대 요청 용량을 50 메가 정도로 지정하겠다는 뜻이다.



C# 에서 "이전 위치" 로 이동하기.

VB6 시절에는 사용하는 함수의 "정의" 로 이동해서 로직을 본다음에 "이전위치" 를 사용해서 원래 있던 곳으로 돌아가는 것이 가능했다.


그런데, 이게 최근엔 없어졌다.


이렇게 "정의로 이동" 은 있지만, "이전 위치" 라는 메뉴는 없어졌다.
그래서 북마크 기능을 이용하던가... 했지만...

사실, 기능 자체는 존재한다.


VisualStudio 2013 에서 "보기" 메뉴에 보면 "뒤로탐색" 이라는 메뉴가 있다.
명칭은 다르지만, 실제로는 VB6 의 "이전 위치" 와 완전히 같은 기능을 한다.

그냥 "Ctrl" 키를 누른상태에서 "-" 키를 누르면 된다.
이런걸 왜 숨겨 놓는건지? "정의" 메뉴는 그냥 놔뒀으면서?

더 신기한 것은 VisualStudio 2003, 2008 에서는 아예 메인메뉴에서도 조차 나오지 않는데도 불구하고, 작동한다. (ㅡ.ㅡ;;)

하여간 이해가 안된다.

물론, "앞으로 탐색" 도 잘 동작한다.





2015년 3월 26일 목요일

C# WinForm "인증서 저장소에서 매니페스트 서명 인증서를 찾을 수 없습니다."

예전에 작업 했던 소스를 불러오면 에러 한두개 쯤은 당연하게 뜬다.
이번에는 "인증서 저장소에서 매니페스트 서명 인증서를 찾을 수 없습니다." ... 가 뜬다.


이건 찾아보니 그냥 ClickOnce 설정만 지워주면 된다고 한다.

"프로젝트" > "속성" 에서....


"서명" 탭의 "ClickOnce 매니페스트 서명" 의 체크를 해제 한다.


나의 경우는 이것만 해도 해결이 되었지만...
"보안" 탭에도 "ClickOnce 보안 설정 사용" 이라는 항목이 있는데, 이것도 해제해 주자.


이렇게 하면 일단 잘 실행이 된다.



2015년 3월 20일 금요일

MsSql 테이블 복제

테이블을 복사 해보자.


샘플 테이블이며 8개의 데이터가 들어 있다.


이 중, intSeq 필드는 PK 이며, 자동증가값으로 지정되어 있다.
이런 테이블을 복사 하는 가장 간단한 방법은.


이렇게 ,

select * into [만들테이블] from [원본테이블]

... 로 지정해 쿼리를 실행하는 것이다.
이렇게 하면 아주 쉽게 테이블을 복사 할 수 있다. 하지만...


이렇게 데이터는 잘 들어가 있지만...


보다시피 테이블 설정은 없어진다. (PK 지정도 안되어 있고, 당연히 자동증가값 옵션도 없어진다.)
즉, 위의 쿼리로는 테이블 형태와 데이터만 복사되어 질 뿐, 그 외 모든 데이터는 없어진다.

테이블 정보를 모두 가진 테이블을 복사 하려면 어떻게 하면 될까?
이 문제는 해결 할려면, 몇가지 방법이 있지만, 테이블을 수동으로 생성하고 데이터를 복사하는게 가장 쉽고 간단하다.


"테이블 스크립팅 > CREAT > 새 쿼리 편집창" 을 선택하면...


이렇게 쿼리를 만들어 준다.


원본 테이블 명을 생성할 테이블 명으로 바꾸어 주고 실행 하면...



이렇게 테이블 속성 까지 다 동일한 테이블이 만들어 진다.
물론 데이터는 없는 껍데기 테이블 이므로 데이터는 직접 넣어 줘야 한다.

이미 존재하는 테이블에 데이터를 넣어 주는 가장 간단한 쿼리는 이것이지만...

insert into [대상테이블]
selec * from [원본테이블]

이렇게 해보면... 이렇게 ...


막상 해보면 오류가 난다.
이것은 "intSeq" 컬럼이 "자동증가" 옵션이 지정되어 있기 때문이다.
만약  "자동증가" 옵션이 지정되어 있지 않는 테이블이었다면 정상적으로 실행되었을 것이다.

그러므로 대상 테이블에 있는 "자동증가" 옵션을 해제하고 데이터를 복사한 후 다시 "자동증가" 옵션을 지정해도 된다.
만약 그러기 귀찮다면....

set identity_insert [대상테이블] on

... 을 실행하면 ID 값을 넣을 수 있다 !!!
이렇게 해보면 !!!


...
... 쒯 ...
.
.
.

불행히도 "set identity_insert on" 을 사용할 때는, 컬럼명을 모두 지정해 줘야 한다.


이렇게.... 해주면...


이렇게 데이터가 잘 복사가 된다.

---------------------------------------------------------------------------------

참고로....


이렇게 "자동증가" 가 지정되어 있는 필드를 빼고 넣도록 쿼리를 실행하면  "set identity_insert on" 같은 옵션을 지정하지 않아도 데이터를 넣을 수 있는데... 이렇게 하면...
아무런 작업을 하지않은 테이블이라면 "자동증가값" 이 "1" 부터 시작하겠지만...
뭔가 작업을 했던 테이블을 초기화 한 경우라면, 이렇게 될 수도 있다.


즉, 대상 테이블이 이미 몇번 데이터를 넣었다가 값을 지웠다던지 했을 경우, 자동 증가값이 중간부터 시작하는 경우가 있다. 이것은 시스템이 해당 테이블의 자동증가값을 계속 기억하기 때문인데, 이것은 테이블의 데이터를 모두 지워도 없어지지 않는다.

다시 말해, 원본과 복사한 테이블의 "자동증가값" 이 동일 함을 보장 할 수 없다.

하지만, 만약 궂이 그 값들이 동일해야 할 필요가 없고, 단지 처음부터 시작하기만 해도 되는 경우라면....


그럴때는,

Truncate Table T_SCHEDULE_BACK
Dbcc Checkident(T_SCHEDULE_BACK, Reseed, 1)


... 를 지정해 주면 ....


이렇게 1 부터 시작하는 자동증가 값을 볼 수 있다.

참고로, "Truncate Table T_SCHEDULE_BACK" 는 테이블 데이터 삭제.
"Dbcc Checkident(T_SCHEDULE_BACK, Reseed, 1)" 는 아이디 값을 "1" 로 지정한다는 뜻이다.



2015년 3월 19일 목요일

원격데스크탑 포트번호 변경

원격 데스트탑의 포트변경.
별도의 관리 UI 가 없으니, 레지스트리 편집기로 직접 수정해 주어야 한다.


"regedit" 를 실행.



"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp"
"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\Wds\Repwd\Tds\Tcp"

... 이 두곳의 "PortNumber" 를 수정하면된다.

16진수로 지정하기는 어려우니, 10진수를 선택하고 원하는 포트번호를 넣으면 된다.

2015년 3월 18일 수요일

포토샵 : PDF 파일을 생성할 때 용량이 너무크면 "Preserve Photoshop Editing Capabilities" 를 해제 하자.

포토샵은 이제 거의 만능이 되어 간다.
이젠 PDF 파일로 생성 할수 있으니...

하지만, 기존의 PDF 파일을 열었다가 다시 저장해 보면 용량이 어마어마하게 늘어나 있는 것을 볼수 있다.

이게 PDF 의 각 페이지들을 이미지로 저장해 버리기 때문인줄 알았는데...
단지 그것 뿐만이 아니라, 포토샵의 작업 정보를 저장하기 때문이었다.

이걸 막으려면...
PDF 파일 저장 단계의 옵션에서 "Preserve Photoshop Editing Capabilities" 옵션을 해제 하면 된다.


이게 어느정도 차이를 가져 오는지 보자.
"Untitled-1.pdf" 는 옵션을 지정하고 저장한것이고, "Untitled-2.pdf" 를 옵션을 해제하고 저장했을뿐 내용은 동일한 파일이다.


보다시피, 겨우 1페이지짜리 간단한 파일인데도, 거의 10배 정도 용량차이가 난다. ㅡ.,ㅡ;;;;

플그램 : freeware pdf 제작 프로그램 "i2pdf"

요즘은 웬만한 워드프로세서는 pdf 파일을 다 만들어 주니, 필요성이 많이 줄어들었지만, 그래도 여전히 pdf 파일 생성기는 쓸경우가 있다.

"i2pdf" 는 pdf 제작 프로그램 중에서도 사용법이 매우 간단하다.
다만... 이제는 개발이 중단되어 더이상의 업데이트는 없다는것이 아쉽다.

다운로드는 http://www.portablefreeware.com/index.php?id=1908 에서 다운 받을수 있다.


저기 "32-bit | 64-bit" 부분을 클릭하면 다운로드 사이트로 이동하는데....


저기서 "Download" 를 클릭해 받으면 된다.

원래 공식 사이트가 있지만... 이미 폐쇠된듯하다.

암튼... 이렇게 파일을 다운 받았으면, 그냥 압축을 풀고 사용하면된다.


보다시피, 화면 구성은 아무것도 없다 싶을 정도로 심플하다.
여기에다 그냥 pdf 로 만들 이미지를 끌어다 놓으면....


아래와 같이 이미지들이 등록된다.


이미지가 등록된 상태에서 각 항목을 클릭해 드래그 해서 순서를 재 정렬 할수 있다.
이 상태에서 "Build PDF" 버튼을 클릭하면...


저장 대화 상자가 열린다.
원하는 옵션을 선택한뒤 저장을 하면...


이렇게 손쉽게 pdf 파일을 만들수 있다.





2015년 3월 17일 화요일

포토샵 : 테두리 있는 사각형 만들기

작업을 하다보면 뭔가를 올려놓을 사각형을 만들어야 할때가 많다.
(프로그램이든 이미지든간에...)
이미지일 경우는 포토샵으로 간단히 만들수 있다.

사각형 "도형"으로 만들어도 되지만, 테두리 처리라던지... 하여간 귀찮으니 그냥 이미지로 만든다.

영역 선택툴로 원하는 크기의 사각형을 만들고...


"Select > Modify > Smooth ..." 를 선택해서...


"Radium" 를 적당히 준다.

그러면 이렇게 네 모서리가 둥글게 나온다.
그냥 날카로운 모서리를 만들고 싶으면 이 단계를 건너 뛰면 된다.
그리고 적당한 색으로 배경색을 칠해주고...
(투명한 사각형을 만들려면 배경색을 칠하지 않으면 된다.)


"Edit > Stroke ..." 를 선택해서...


원하는 테두리의 굵기와 색을 지정해 준다.


그러면 아래와 같이 사각형 틀이 만들어진다.


보여준건 그냥 사각형 만드는 예지만, 특정 이미지로 작업하면 원하는 이미지를 사각형으로 잘라내는 용도로 쓸수도 있다.