2016-05-24 2 views
1

Я использую событие PrepareToInstall для остановки и удаления службы. Это прекрасно работает, ошибок не возникает.PrepareToInstall timing

Однако, похоже, проблема связана с временными проблемами, потому что ИСТОРИЯ InnoSetup говорит мне, что «oscmaintenanceservice» все еще работает и спрашивает, должно ли оно закрыть его.

Я думал, что если API вернется из функции, чтобы закрыть и удалить службу, приложение уже должно исчезнуть.

Кто-нибудь видит ошибку на моей стороне или имеет какие-либо предложения для меня?

Спасибо!

function PrepareToInstall(var NeedsRestart: Boolean): String; 
begin 

    //MsgBox('ssInstall.', mbInformation, MB_OK); 

    if IsServiceInstalled('oscmaintenanceservice') then 
    BEGIN 
     //MsgBox('ssInstall: Service is installed.', mbInformation, MB_OK); 

     if IsServiceRunning('oscmaintenanceservice') then 
      BEGIN 
       //MsgBox('ssInstall: Service is running.', mbInformation, MB_OK); 

       if not StopService('oscmaintenanceservice') then 
       BEGIN 
        MsgBox('ssInstall: Couldnt stop service.', mbInformation, MB_OK); 
       END 
      else 
      BEGIN 
       //MsgBox('ssInstall: Service was stopped.', mbInformation, MB_OK); 
      END; 
     END 
      else 
      BEGIN 
       MsgBox('ssInstall: Service not running.', mbInformation, MB_OK); 
      END; 
     if not RemoveService('oscmaintenanceservice') then 
      BEGIN 
       MsgBox('ssInstall: Couldnt remove service.', mbInformation, MB_OK); 
      END 
      else 
      BEGIN 
       //MsgBox('ssInstall: Service was removed', mbInformation, MB_OK); 
      END; 
    END 
    else 
    BEGIN 
     MsgBox('ssInstall: Service not installed.', mbInformation, MB_OK); 
    END; 
END; 
+0

Вы не имеете никакого отношения к 'PrepareToInstall'. Речь идет о реализации функций, которые вы вызываете. И мы не знаем, что они делают. –

+0

Кроме того, что это значит * «InnoSetup говорит мне, что« oscmaintenanceservice »все еще работает» *? –

+0

Файл журнала установщика может также помочь (используйте командную строку '/ log'). –

ответ

0

Кажется, что Windows требуется немного времени, чтобы признать, что служба была удалена.

Я добавил спать (1000) после остановки и удаления функции в PrepareToInstall, и с тех пор он отлично работает.