我写Delphi应用程序(基本上是为了管理的服务的图形用户界面,它具有以下特征:允许用户设置了由服务使用的一些参数和启动/停止/取消安装/安装新版本)。 因此,所有的功能中有一个“不检点”:在某一点上的应用程序会尝试卸载和安装服务的新版本。指定的服务标记为删除上Delphi应用程序
随着ShellExecute
我运行以下命令:
C:\myPath\myService.exe /Uninstall
C:\myPath\myService.exe /Install // this is tipically done to install a newer version of it
如果该服务已经在运行它成功地卸载了(我得到“成功地卸载”消息),但如果我打开SERVICES.MSC我看到我的服务仍然在服务列表中,但从其popup菜单中禁用了启动和停止(虽然我希望它没有列出)。
在这一刻,如果我尝试安装,我得到以下错误的服务: “指定的服务被标记为删除”
需要注意的是,如果我运行卸载和命令安装命令提示卸载很好,服务不在services.msc列表中。注意:在这种情况下,我的意思是根本不使用Delphi(或编译的exe)。
我尝试了很多技巧,包括卸载后放置一个Sleep(10000)
,但它没有工作我也试图保持services.msc关闭(因为我读它可能是一个问题,让它打开)。
我发现了一个成功的窍门使用以下步骤:
1)我把一个断点刚刚从德尔福
调用卸载后2)我去SERVICES.MSC:该服务仍处于列表,即使在“刷新”是STIL列表
3)我打破(从IDE:CTRL + F2)应用
4)我在SERVICES.MSC再去我点击的exceution “刷新”按钮:因为它,myservice将从列表中删除应该是
所以我怀疑德尔福XE2(无论是在IDE中调试或运行EXE)以某种方式“锁定服务”,不允许它被完全卸载。
注:该服务使用另一个德尔福项目建成!
你能帮助我理解由ShellExecute
做确实给这个错误,为什么服务卸载?
非常感谢。
重要提示: 我忘了提及我使用IDE和cmd.exe作为管理员。
停止该服务,然后将其卸载(净停止“yourservicename”) – whosrdaddy
是的,我停止它,即使不使用净停止,但使用WinSvc方式 – LaBracca
也与净停止我得到了相同.... – LaBracca