Go to file
Claude 49c2192d7d
v2.0.0: README에 원격관리·Active/Passive 설명 추가, 버전 2.0.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013U497kUNL8ArhV7jkzCpKa
2026-10-27 05:38:48 +00:00
Core Passive 대상 제목에 (Passive) 표시, 연결됨 로그 중복 수정 2026-10-27 05:31:54 +00:00
Views 원격관리(화면 보기/제어)와 Active/Passive 연결 방향 추가 2026-10-27 04:43:37 +00:00
Windows Passive 대상 제목에 (Passive) 표시, 연결됨 로그 중복 수정 2026-10-27 05:31:54 +00:00
.gitignore JJServiceManager 1.0.0: Windows 서비스 기동/종료 관리 프로그램 2026-10-27 01:56:10 +00:00
JJServiceManager.csproj v2.0.0: README에 원격관리·Active/Passive 설명 추가, 버전 2.0.0 2026-10-27 05:38:48 +00:00
Program.cs 원격 모니터링 기능 추가 (작업 중, 검토 반영 전) 2026-10-27 03:44:31 +00:00
README.md v2.0.0: README에 원격관리·Active/Passive 설명 추가, 버전 2.0.0 2026-10-27 05:38:48 +00:00
app.ico JJServiceManager 1.0.0: Windows 서비스 기동/종료 관리 프로그램 2026-10-27 01:56:10 +00:00
app.manifest JJServiceManager 1.0.0: Windows 서비스 기동/종료 관리 프로그램 2026-10-27 01:56:10 +00:00
app.test.manifest 테스트 빌드 옵션 추가: -p:TestBuild=true 시 관리자 권한 없이 실행 (화면 자동 점검용) 2026-10-27 04:10:30 +00:00
build.bat JJServiceManager 1.0.0: Windows 서비스 기동/종료 관리 프로그램 2026-10-27 01:56:10 +00:00

README.md

JJServiceManager (Ent)

Windows 서비스 기동/종료 관리 프로그램 (C# WPF, .NET 8)

  • v1.1부터 다른 PC의 등록된 서비스를 원격으로 모니터링·기동·종료할 수 있습니다.
  • v2.0부터 원격관리(화면 보기 / 키보드·마우스 제어) 와 Active / Passive 접속 방향 선택이 추가되었습니다.

실행 파일

파일 크기 필요 조건
JJServiceManagerEnt.exe (런타임 필요판) 약 2MB .NET 8 Desktop Runtime (x64) 설치
JJServiceManagerEnt.exe (단독 실행판) 약 65MB 없음

항상 관리자 권한으로 실행됩니다 (실행할 때 UAC 창이 한 번 뜹니다).

화면

초기화면

  • 추가: 내 PC의 Windows 서비스 전체 목록에서 관리할 서비스 선택
  • 삭제: 체크한 내 PC 서비스를 목록에서 제외 (Windows 서비스 자체는 건드리지 않음, 원격 서비스는 삭제 불가)
  • Start / Stop: 체크한 서비스(원격 포함)를 차례로 시작/중지
  • Windows 강제종료 / Windows 재시작: 확인창에 표시된 무작위 숫자 6자리를 그대로 입력해야만 실행 (붙여넣기 불가, 설정에서 버튼 숨김 가능)
  • 설정, 종료(JJServiceManager 완전 종료, 서비스는 그대로 유지)
  • 서비스 목록
    • 전체 탭: PC별 묶음 ("내 PC", "192.168.0.10 / SERVER01", "192.168.0.20 / SERVER02 (Passive)" …), PC별 접기/펼치기
    • PC 탭 추가 콤보박스: 고른 PC만 보여주는 탭을 옆에 추가, ✕로 닫기 (다음 실행 때도 유지)
    • 원격 서비스 앞에는 IP/hostname 표시 (Passive 대상은 뒤에 (Passive))
    • 원격 PC 제목 줄의 [원격관리]: 그 PC 화면 보기 / 키보드·마우스 제어 (아래 "원격관리" 참고)
    • 서비스마다 Start / Stop / Status / Log, 상태 자동 갱신 (초록=실행 중, 빨강=중지됨)
  • 서비스 줄 우클릭(내 PC): 로그 파일 지정 / 로그 폴더 지정 / 경로 해제
  • 하단 로그: 작업 기록 (번호 + 체크박스)
    • 전체선택 / 전체취소 / 복사(체크한 줄)
    • 화면클리어: 새 로그를 화면 맨 위부터 출력, 위로 스크롤하면 이전 로그가 보임, 번호는 이어짐
    • 로그 클리어: 화면의 로그를 모두 지우고 번호를 1번부터 다시 시작
    • 로그 파일은 어떤 경우에도 지우지 않음
  • Esc: 설정에 따라 트레이로 / 완전 종료 (창의 X 버튼도 같음)

추가 선택 화면

  • 설명 / 상태 / 이름 / 시작유형 열, 열 제목을 누르면 정렬(▲▼)
  • 전체선택 / 전체취소 / 선택완료, 검색
  • 이미 등록된 서비스는 노란색 + 체크된 상태로 표시

로그창

  • 내 PC: 로그 파일 또는 폴더(가장 최근 수정 파일 자동 추적) 지정
  • 원격: 대상 PC에서 지정한 로그를 실시간으로 받아서 표시 (연결이 끊겼다 다시 붙으면 새 로그부터 이어서)
  • 인코딩 자동/UTF-8/CP949, 띄우기 방식: 개별 창 / 탭 / 좌우 분할 비교

원격 모니터링

모든 PC에 같은 프로그램을 설치하고, 설정에서 역할을 각각 켜고 끕니다. 한 PC가 두 역할을 동시에 할 수 있습니다.

역할 설정 탭 하는 일
대상 원격 접속 허용 관리 PC에 이 PC에 등록된 서비스만 보여주고 Start/Stop 실행, 원격관리 허용 여부 결정
관리 관리 대상 PC 등록한 PC의 서비스를 초기화면에 표시, Start/Stop, 로그 보기, 원격관리

접속 방향 (대상 PC마다 선택)

방향 누가 접속하나 쓰는 경우 연결 방법
Active 관리 PC → 대상 PC 관리 PC가 대상 PC에 직접 접속할 수 있을 때 대상 PC의 IP·포트
Passive 대상 PC → 관리 PC 대상 PC가 방화벽·공유기 뒤에 있어서 들어갈 수 없을 때 접속 코드 (예: 3HY7-6TEH)
  • Passive는 대상 PC가 관리 PC로 먼저 접속한 뒤, 연결 안에서는 Active와 똑같이 동작합니다 (서비스 목록, Start/Stop, 로그, 원격관리).
  • 관리 PC는 접속 코드로 어느 대상 PC인지 구분합니다. 코드가 맞지 않는 접속은 거부합니다.
  • 연결이 끊기면 양쪽 모두 자동으로 다시 연결합니다.

통신 방식

방식 Active 기본 포트 (대상 PC) Passive 기본 포트 (관리 PC) 설명
SSH (프로그램 내장) 2222 2224 OpenSSH 설치 없이 프로그램 안의 SSH 서버 사용
지정 포트 (TLS) 9988 9990 프로그램끼리 TLS로 암호화해 통신
  • 인증: 대상 PC에서 정한 접속 비밀번호 (대상 PC에는 해시로만 저장, 관리 PC에는 Windows 계정으로 암호화해 저장)
  • 서버 지문(인증서) 확인은 하지 않음 (암호화만)
  • 비밀번호를 5분 동안 10번 넘게 틀리면 잠시 접속 거부
  • Windows 방화벽 규칙을 자동으로 열고 닫음
    • 대상 PC Active 수신: JJServiceManager Remote
    • 관리 PC Passive 수신: JJServiceManager Passive

사용 순서 — Active

  1. 대상 PC: 설정 → 원격 접속 허용 → 켜기, 접속 비밀번호 입력, Active 수신 켜기, 방식·포트 선택 → 확인
  2. 관리 PC: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → 연결 방향 Active, 대상 IP, 같은 방식·포트, 비밀번호 입력 → [연결 테스트] → [추가] → 확인
  3. 초기화면에 대상 PC 묶음이 나타나고, hostname은 자동으로 채워짐

사용 순서 — Passive

  1. 관리 PC: 설정 → 관리 대상 PC
    • 다른 PC 관리 켜기, Passive 수신 방식 / 포트 확인 (기본: 지정 포트 9990, Passive 대상이 하나라도 있을 때만 열림)
    • 연결 방향 Passive 선택 → 접속 코드가 자동으로 만들어짐 ([새 코드]로 다시 만들기)
    • 대상 PC의 접속 비밀번호 입력 → [추가] → 확인
    • 초기화면에 Passive 접속코드 묶음이 "연결 중…"으로 나타남
  2. 대상 PC: 설정 → 원격 접속 허용
    • 켜기, 접속 비밀번호 입력 (관리 PC에 넣은 것과 같게)
    • Passive 접속 칸에 관리 PC 주소, 접속 코드, 방식·포트(관리 PC의 Passive 수신과 같게) 입력 → [추가] → 확인
    • 여러 관리 PC에 동시에 접속하도록 여러 줄 등록 가능
  3. 대상 PC가 접속하면 관리 PC의 묶음 제목이 IP / hostname (Passive)로 바뀜
  4. Active 수신이 필요 없으면 대상 PC에서 Active 수신을 꺼도 됨 (포트를 열지 않음)

숫자 6자리 확인

설정 → 일반에서 내 PC / 원격 Start/Stop 각각 켜고 끔 (기본: 내 PC 끔, 원격 켬). 여러 서비스를 한꺼번에 Start/Stop할 때는 한 번만 입력합니다.

원격관리 (화면 보기 / 키보드·마우스 제어)

대상 PC 설정 (원격 접속 허용 탭 → 원격관리)

항목 설명
화면 보기 허용 관리 PC에서 이 PC 화면을 볼 수 있음
화면 및 키보드·마우스 제어 허용 관리 PC에서 이 PC를 마우스·키보드로 조작할 수 있음 (화면 보기가 켜져 있어야 함)
연결 시 승인 필요 원격관리를 시작할 때마다 이 PC에 승인 창을 띄움 (30초 안에 누르지 않으면 자동 거부)
  • 허용을 끄면 이미 연결된 원격관리도 바로 끊기거나(보기) 조작이 막힙니다(제어).
  • 원격관리 중에는 대상 PC 화면 맨 위 가운데에 빨간 표시 막대("원격 제어 중: 관리 PC")가 항상 나타납니다. 막대의 [연결 끊기] 를 누르면 즉시 종료됩니다.

관리 PC에서 사용

  1. 초기화면에서 원격 PC 제목 줄의 [원격관리] 클릭
  2. 무작위 숫자 6자리 입력 (원격관리는 설정과 관계없이 항상 입력, 붙여넣기 불가)
  3. 대상 PC에서 승인하면 원격관리 창이 열림
    • 모니터 1 / 모니터 2 … / 전체: 볼 모니터 선택 (주 모니터에 (주) 표시)
    • 창을 열면 바로 제어가 시작됨 (제어 허용 시), 상태 줄에 ● 제어 중 또는 보기 전용과 초당 장수 표시
    • 창 안에서 클릭·드래그·휠·키보드 입력이 대상 PC로 전달됨 (창을 떠나면 눌린 키는 자동으로 뗌)
    • [연결 끊기] 또는 창 닫기로 종료
  • 화면은 JPEG로 압축해 최대 약 8장/초로 보내고, 바뀌지 않은 화면은 보내지 않습니다.
  • Ctrl+Alt+Del, Windows 키 조합, UAC 창(보안 데스크톱)은 원격으로 조작할 수 없습니다.

테스트용 중복 실행

같은 PC에서 여러 개를 띄워 원격 기능을 시험할 때:

JJServiceManagerEnt.exe --instance 2
  • 창 제목에 [테스트 인스턴스 2] 표시
  • 설정 폴더를 따로 씀: %AppData%\JJServiceManager_instance2
  • 기본 포트가 인스턴스 번호만큼 밀림 (인스턴스 N: Active 지정 포트 9988+N-1, SSH 2222+N-1 / Passive 수신 지정 포트 9990+N-1, SSH 2224+N-1)
    • 번호가 2 이상 차이 나는 인스턴스끼리는 포트가 겹칠 수 있으니 설정에서 포트를 바꿔 쓰세요.
  • 시작 프로그램 작업 이름, 방화벽 규칙 이름, 중복 실행 방지도 인스턴스별로 따로 씀
  • 코드에서 [테스트용 중복 실행] 주석이 붙은 부분이 이 기능입니다.

설정

탭 항목
일반 컴퓨터 시작시 기동, 단축키(기본 Ctrl+Shift+A), 서비스 시작시 로그보기, 로그창 띄우기, Esc, Windows 종료키, 숫자 확인(내 PC/원격)
원격 접속 허용 켜기/끄기, 접속 비밀번호, Active 수신(방식·포트), Passive 접속 목록(관리 PC 주소·접속 코드·방식·포트), 원격관리(화면 보기 / 제어 / 승인), 이 PC의 IP 안내
관리 대상 PC 다른 PC 관리 켜기/끄기, Passive 수신 방식·포트, 대상 목록(연결 방향, 대상 IP 또는 접속 코드, 방식·포트, 비밀번호), hostname 자동, 연결 테스트(Active)

저장 위치

  • 설정: %AppData%\JJServiceManager\settings.json
  • 작업 로그: %AppData%\JJServiceManager\logs\yyyy-MM-dd.log (추가만 하고 삭제하지 않음)

빌드

.NET 8 SDK 설치 후 build.bat 실행 → publish 폴더에 두 가지 exe 생성

  • 화면 정의는 Views/*.xaml이며 실행 시 읽어들입니다 (XAML 컴파일 없음).
  • 원격 통신: Core/Remote/ (SSH 라이브러리: Microsoft.DevTunnels.Ssh, MIT)
  • 원격관리 화면 캡처·입력: Core/Remote/ScreenCapture.cs, 화면: Windows/RemoteScreenWindows.cs
  • 관리자 권한 없이 시험할 때: dotnet publish ... -p:TestBuild=true (asInvoker 매니페스트, 서비스 Start/Stop·방화벽은 실패함)