답변:
이벤트 또는 감사 로그 에 서비스 삭제 흔적이없는 경우 수행 할 수있는 작업은 서비스가 존재하는지 감지하는 작은 콘솔 앱을 만들고이 앱을 연결 Windows Task Scheduler
빈도 또는 트리거 에 따라 실행되도록 예약 하는 것입니다. 서비스가 추가 또는 제거 된 경우 경고를 받도록 요구 사항을 사용자 정의 할 수 있습니다. .
콘솔 응용 프로그램은 처음 실행에,이 시스템에 그것을 통해 서비스에 대한 변경 사항을 추적 될 후속 실행에 모든 서비스를 기록하도록 설계
servicesRemoved
하고servicesAdded
이것으로 우리는 서비스가있을 때 수행 할 작업을 결정할 수 있습니다, 한 수정
콘솔 앱 : ServiceDetector.exe
static void Main(string[] args)
{
var path = @"C:\AdminLocation\ServicesLog.txt";
var currentServiceCollection = ServiceController.GetServices().Select(s => s.ServiceName).ToList(); //Queries the most current Services from the machine
if (!File.Exists(path)) //Creates a Log file with current services if not present, usually means the first run
{
// Assumption made is that this is the first run
using (var text = File.AppendText(path))
{
currentServiceCollection.ForEach((s) => text.WriteLine(s));
}
return;
}
// Fetches the recorded services from the Log
var existingServiceCollection = File.ReadAllLines(path).ToList();
var servicesRemoved = existingServiceCollection.Except(currentServiceCollection).ToList();
var servicesAdded = currentServiceCollection.Except(existingServiceCollection).ToList();
if (!servicesAdded.Any() && !servicesRemoved.Any())
{ Console.WriteLine("No services have been added or removed"); return; }
//If any services has been added
if (servicesAdded.Any())
{
Console.WriteLine("One or more services has been added");
using (var text = File.AppendText(path))
{
servicesAdded.ForEach((s) => text.WriteLine(s));
}
return;
}
//Service(s) may have been deleted, you can choose to record it or not based on your requirements
Console.WriteLine("One or more services has been removed");
}
스케줄링 작업
Windows 시작> 작업 스케줄러> 기본 작업 생성> 트리거 설정> exe 첨부> 완료
Windows 서비스를 삭제하면 이벤트가 시스템 이벤트 로그 (소스 : /superuser/1238311/how-can-we-detect-if-a-windows-)에 추가 될 수 있습니다. 서비스가 삭제되었습니다. 이벤트 로그가 있습니다. ).
AFAIK 서비스 삭제를 감사하는 감사 정책이 없으며 여기에 나열되어 있다고 생각합니다. https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ 기본 감사 프로세스 추적
ServiceController.GetServices()
서비스가 제거 될 때 프로그램이 실행되지 않을 수 있기 때문에 폴링에 문제 가 있다고 생각 합니까?
좋은 계측을 구성하는 것을 배울 때까지 계측을 구축하는 방법은 많이 있습니다. 내 사용법은 본질적으로 Wikipedia 항목 https://en.wikipedia.org/wiki/Instrumentation 에서 직접 가져옵니다 .
계측 방법
http://www.powersemantics.com/e.html
측정 표시기 문제에 대한 해결책이 있지만 "푸시 기반"계측이 다른 시스템에 신호를 보내는 방법을 개념화해야합니다. 내 E 기사에서 설명 하듯이 계측기는 항상 데이터를 가져와야합니다. 이벤트 중심 신호는 필요하지 않은 잠재적 장애 지점입니다.
별도의 응용 프로그램을 구축 할 때 발생할 수있는 불확실성 또는 의심을 없애기 위해 모니터는 일반적으로 독립적입니다 ( Wikipedia와 같이 통합되지 않음 ). 따라서 모니터가 "실행 중이 아닐 수 있습니다"는 것은 실제로 켜져 있지 않은 실제 비 통합 모니터를 만들지 않았 음을 의미합니다. 소비자 시스템은 자체 프로세스에 검사를 통합 하기 때문에 계측을 올바르게 모델링하지 않습니다 .
이러한 책임을 분리하고 진행하십시오. 기기가 삭제 된 서비스를 합리적으로 폴링하고 타이머를 사용하여 데이터를 폴링하는 빈도를 결정하십시오. 제안 된 API 호출 simon-pearson을 사용하면 서비스가 추가 된시기를 감지 할 수도 있습니다. 물론, 모니터는 표시기가 추가되거나 제거 된 내용을 유추 할 수 있도록 서비스 목록 사본을 로컬로 캐시해야합니다.