准备安装时间

时间:2016-05-24 11:59:09

标签: service inno-setup

我正在使用PrepareToInstall事件来停止和删除服务。 这样可以正常工作,不会抛出任何错误。

然而有时似乎存在计时问题,因为SOMETIMES 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;

1 个答案:

答案 0 :(得分:0)

似乎Windows需要一点时间来识别服务已被删除。

我在PrepareToInstall中的停止和删除功能之后添加了sleep(1000),从那时起它工作正常。