C #에서 제거하는 동안 <service> .exe에서 잠금이 해제되었는지 확인하는 방법은 무엇입니까?

Jamilia

응용 프로그램을 제거하려고 할 때 먼저 서비스를 중지하고 WaitForStatus가 성공을보고하는지 확인합니다. 그런 다음 함께 삭제 sc delete하지만 설치된 폴더에서 모든 파일이 제거되지는 않습니다. 수동으로 제거 할 수 있지만 몇 초 정도 지나면 PC가 다른 PC로 바뀝니다. 여기서 우리는 창이 일부 파일 (주로 service.exe)을 유지 / 잠금하여 해당 파일 및 기타 모든 관련 파일을 삭제하지 못하는 것으로 생각합니다.

우리가 달성하고자하는 것은를 성공적으로 삭제 한 후 <service>.exe잠금이 여전히 켜져 있는지 확인하고 (예 : while 루프에서) <service>.exe2 초 동안 잠자기 상태로 유지 한 다음 해제 될 때까지 다시 확인한 다음 계속 진행하는 것입니다. 파일을 제거하십시오. 약 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()
{
 ...
}
Jamilia

관심이있을 수있는 일부 사용자를 위해 while 루프에서 service.exe를 삭제하고 삭제 될 때까지 다시 시도하여이 문제를 해결했습니다. 재 시도하기 전에 1 초 동안 잠을 잔다. 또한 재시도 횟수를 제한해야합니다. 그렇지 않으면 제거가 중단 될 수 있습니다. 비슷한 사용 사례를 가진 사람에게 도움이되기를 바랍니다

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관