본문

C#.NET으로 원격접속 프로그램 만들기(RDP)

이전까지 잘 접속되던 "원격 데스크톱 연결"이 정책 강화로 방화벽단에서 막힘으로 이제 다른 원격접속 클라이언트를 찾아야 했다. 물론 VNC는 당연히 안되기 때문에 여러 프로그램을 모색해봤는데 가장 좋은 대안은 사무실 동료도 유용하게 사용하던, 그리고 개인사용자에게 무료로 배포하는 TeamViewer. 하지만 하나의 문제가 있었으니, 바로 윈도우 서버군에서는 프로버전을 사용해야 한다는것. 다른 프로그램이 없을까 다시 돌아다니다가 MyGreenPC라는 솔루션을 발견하였다.

하지만 이도 역시 문제가 있었으니... 서버 프로그램과 호환이 완벽하지 않은 운영체제가 있었을 뿐만 아니라 클라이언트도 충돌이 났던것. Windows 7을 사용하기 때문에 기본으로 설치된 .net framework가 잘 안맞나 해서 별짓을 해봐도 안되길래 도대체 어떻게 돌아가는지 확인해 보기로 했다. 대략 보니 MSTSCLib.dll라는 라이브러리를 사용하여 이게 뭔가 하고 구글링 했더니 여러 검색 결과가 나왔고, 그중에 한때 자주 들락날락했던 codeproject에서 이를 응용한 프로젝트가 있길래 혹시나 나중을 대비하여 한번 여기에 메모하고자 한다. 종요한것은 AxMSTSCLib을 사용한다는것과 접속과 접속해제 부분만 알면 되는데 사실 이 게시물이 의미가 있나.. 싶을정도로 간략하다-_-;;;

아무튼 언급하다 말았는데, 결국 이를 보아 원격 데스크탑 연결과 동일한 프로토콜을 쓰므로 역시 방화벽에서 막히겠군.. 하고 MyGreenPC도 포기하도록 했다. 그래도 신생기업살리는 셈치고 경험한 버그들과 건의사항들을 모아 메일로 리포팅해주었다. 흠 착하군?

아래 내용은 Codeproject의 Remote Desktop using C#.NET을 한글로 옮겨온것임을 밝힙니다.

============

### 이 게시물은 Microsoft의 "터미널 서비스 클라이언트를 위한 ActiveX 컨트롤"을 사용하여 원격접속 프로그램을 만드는방법에 대해 다루고 있다.

소개
원격 데스크탑 서비스(Remote Desktop Services)는 네트워크를 통해 원격에 있는 컴퓨터에 접속하게 해주는, Microsoft Windows의 컴포턴트중에 하나이다. 프로그램의 UI는 클라이언트에서만 보여지고, 모든 입력은 네트워크상의 원격지 컴퓨터로 전달된다.

우리는 원격접속을 매우 유용하게 사용하고 있다. 이는 원격지에 로그인하여 컴퓨터 체크, 프로그램 설치, 문제 해결등의 많은 일을 하게 해준다. 우리는 또한 자택근무를 할 떄에도 원격접속을 사용한다.

그런데 OS에서 지원하는 Microsoft 터미널 서비스 클라이언트가 있음에도 .NET 프로그램을 제작하려고 할까? 만약 당신이 3개의 각각 다른 원격지 컴퓨터를 사용하여 작업하고자 할 때, 모든 화면을 동시에 띄워놓고 이쪽저쪽의 서버에서 작업을 하고싶을 경우가 있을 것이다. MSTSC(터미널 서비스 클라이언트) 를 사용하자면 3개의 각각의 프로그램을 실행해서 3개의 서버를 관리해야 할 것이다. 하지만 이것은 작업환경을 복잡하게 만들 수 있다. 하지만 .NET기반의 프로그램을 사용한다면 하나의 윈도우 아래에 탭으로 분리된 세개의 화면을 접할 수 있을것이다.

배경
우리는 AxMSTSCLib이라는 ActiveX 컴포넌트를 사용하여 원격지의 컴퓨터에 접속할것이다. .NET으로 원격접속 프로그램을 개발하는것은 그리 어려운일은 아닌데, 왜냐하면 Microsoft에서는 이미 우리를 위해 "Microsoft RDP Client Control"이라는 ActiveX Control을 마련해놓았기 때문이다.

작업과정
Visual Studio IDE를 켜서 윈도우 어플리케이션을 만든다. 그후 COM탭에서 "Microsoft Terminal Services Control Type Library"를 레퍼런스에 추가한다. 이는 프로젝트에 MSTSCLib.dll을 추가할것이다. 툴박스에서 MSTSC를 추가하려면 툴박스에서 오른쪽 버튼을 누른 후 "아이템 선택..."을 누른다. 그 후 Microsoft Terminal Services 컨트롤을 추가한다.

-접속
rdp.Server = txtServer.Text;
rdp.UserName = txtUserName.Text;
IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx();
secured.ClearTextPassword = txtPassword.Text
;
rdp.Connect
();

-접속해제
if
(rdp.Connected.ToString() == "1") rdp.Disconnect();

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.