我正在使用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;
答案 0 :(得分:0)
似乎Windows需要一点时间来识别服务已被删除。
我在PrepareToInstall中的停止和删除功能之后添加了sleep(1000),从那时起它工作正常。