응용 프로그램을 제거하려고 할 때 먼저 서비스를 중지하고 WaitForStatus가 성공을보고하는지 확인합니다. 그런 다음 함께 삭제 sc delete
하지만 설치된 폴더에서 모든 파일이 제거되지는 않습니다. 수동으로 제거 할 수 있지만 몇 초 정도 지나면 PC가 다른 PC로 바뀝니다. 여기서 우리는 창이 일부 파일 (주로 service.exe)을 유지 / 잠금하여 해당 파일 및 기타 모든 관련 파일을 삭제하지 못하는 것으로 생각합니다.
우리가 달성하고자하는 것은를 성공적으로 삭제 한 후 <service>.exe
잠금이 여전히 켜져 있는지 확인하고 (예 : while 루프에서) <service>.exe
2 초 동안 잠자기 상태로 유지 한 다음 해제 될 때까지 다시 확인한 다음 계속 진행하는 것입니다. 파일을 제거하십시오. 약 30 초가 소요될 수 있지만 PC마다 다르기 때문에 무작위로 기다리는 대신 강력해야합니다. 파일 (service.exe)이 잠겨 있는지 어떻게 확인합니까? 내 연구에서 나는 그것에 대한 직접적인 해결책을 보지 못했습니다. 모두가 file.Open (FileMode.Open, FileAccess.Read, FileShare.None)
. 이것은 불필요한 것 같습니다. 직접적인 해결책이 있습니까?
다음은 서비스를 중지하고 삭제하는 방법에 대한 코드입니다.
try
{
service= new ServiceController(serviceName);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60));
service.Refresh();
if (service.Status == ServiceControllerStatus.Stopped)
{
//runs command with sc delete 'servicename'
return RunCommand("cmd.exe", "/c sc delete \"" + serviceName + "\"");
}
}
catch()
{
...
}
관심이있을 수있는 일부 사용자를 위해 while 루프에서 service.exe를 삭제하고 삭제 될 때까지 다시 시도하여이 문제를 해결했습니다. 재 시도하기 전에 1 초 동안 잠을 잔다. 또한 재시도 횟수를 제한해야합니다. 그렇지 않으면 제거가 중단 될 수 있습니다. 비슷한 사용 사례를 가진 사람에게 도움이되기를 바랍니다
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다