我是一位有用的助手,可以为您翻译文本。
我写了一个Delphi应用程序(基本上是一个GUI,用于管理服务,它具有以下功能:允许用户设置一些由服务使用的参数以及启动/停止/卸载/安装新版本)。 因此,在所有功能中,有一个“无法正常工作”的功能:在某个时刻,应用程序尝试卸载并安装新版本的服务。
使用
如果服务已在运行,则它会被成功卸载(我会收到“成功卸载”消息),但是如果我打开services.msc,我会发现myservice仍在服务列表中,但启动和停止选项被禁用了(而我希望它根本不在列表中)。
此时,如果我尝试安装服务,则会出现以下错误:“指定的服务已标记为删除”。
请注意,如果我从命令提示符中运行卸载和安装命令,则卸载很好,并且服务不在services.msc列表中。注:在这种情况下,我意味着根本不使用Delphi(或已编译的exe)。
我尝试了许多技巧,包括在卸载后放置
我找到了一种成功的方法,步骤如下:
1)我在从Delphi调用Uninstall之后设置断点
2)我进入services.msc:即使在“刷新”之后,服务仍然在列表中
3)我中断应用程序的执行(从IDE:CTRL + F2)
4)我再次进入services.msc,单击“刷新”按钮:myservice从列表中删除,正如它应该的那样
因此,我怀疑Delphi XE2(IDE中的调试或运行exe)在某种程度上“锁定了服务”,不允许完全卸载。请帮助我理解为什么通过
谢谢。
我写了一个Delphi应用程序(基本上是一个GUI,用于管理服务,它具有以下功能:允许用户设置一些由服务使用的参数以及启动/停止/卸载/安装新版本)。 因此,在所有功能中,有一个“无法正常工作”的功能:在某个时刻,应用程序尝试卸载并安装新版本的服务。
使用
ShellExecute
命令我运行以下命令:C:\myPath\myService.exe /Uninstall
C:\myPath\myService.exe /Install // this is tipically done to install a newer version of it
如果服务已在运行,则它会被成功卸载(我会收到“成功卸载”消息),但是如果我打开services.msc,我会发现myservice仍在服务列表中,但启动和停止选项被禁用了(而我希望它根本不在列表中)。
此时,如果我尝试安装服务,则会出现以下错误:“指定的服务已标记为删除”。
请注意,如果我从命令提示符中运行卸载和安装命令,则卸载很好,并且服务不在services.msc列表中。注:在这种情况下,我意味着根本不使用Delphi(或已编译的exe)。
我尝试了许多技巧,包括在卸载后放置
Sleep(10000)
,但它没有起作用,我还尝试关闭services.msc(因为我读过它可能是一个问题留下它开放)。我找到了一种成功的方法,步骤如下:
1)我在从Delphi调用Uninstall之后设置断点
2)我进入services.msc:即使在“刷新”之后,服务仍然在列表中
3)我中断应用程序的执行(从IDE:CTRL + F2)
4)我再次进入services.msc,单击“刷新”按钮:myservice从列表中删除,正如它应该的那样
因此,我怀疑Delphi XE2(IDE中的调试或运行exe)在某种程度上“锁定了服务”,不允许完全卸载。请帮助我理解为什么通过
ShellExecute
进行的服务卸载会出现此错误?谢谢。