我编写了一个 Delphi 应用程序(基本上是一个用于管理服务的 GUI,它具有以下功能:允许用户设置服务使用的一些参数以及启动/停止/unintsall/安装新版本)。因此,在所有功能中,有一个“行为不正常”:在某个时候,应用程序会尝试卸载并安装新版本的 a 服务。
随着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)以某种方式“锁定服务”不允许它被完全卸载。
注意:该服务是使用另一个 delphi 项目构建的!
你能帮我理解为什么服务卸载ShellExecute
确实会出现这个错误吗?
非常感谢。
重要提示: 我忘了提到我使用 IDE 和 cmd.exe 作为管理员。