Ple*_*rds 0 delphi windows-services
历史
我建立一个Windows Service作为我的一部分Platform Application来处理更新和服务器的功能,因此它可以被安装在机器比在不同的Client Application安装.它使用UDP发送和接收广播消息,并使用TCP来处理更敏感和最重要的消息.
目的
我希望最终用户可以轻松安装我的应用程序,只需复制计算机中的可执行文件并执行它们即可.主应用程序应验证用户是否为管理员,创建配置文件,然后安装Windows服务并运行它,因此当非管理用户登录时,他们不会从我的应用程序收到有关管理权限的任何错误.目标是在不需要现有技术人员的情况下进行大多数配置,因为数据库将是远程的.
问题
我的服务正在使用命令正常安装,MyService.exe /install但它没有自动启动.启动它的唯一方法是继续Control Panel > Admin Tools > Services手动操作.我尝试net start MyService通过我的应用程序调用,但我收到invalid service name了shell.我tryied了executable name,该display name和object name服务,但没有一次成功.这是我的TService的目标:
object ServiceMainController: TServiceMainController
OldCreateOrder = False
OnCreate = ServiceCreate
DisplayName = 'PlatformUpdateService'
Interactive = True
AfterInstall = ServiceAfterInstall
AfterUninstall = ServiceAfterUninstall
OnShutdown = ServiceShutdown
OnStart = ServiceStart
OnStop = ServiceStop
Height = 210
Width = 320
Run Code Online (Sandbox Code Playgroud)
题
我应该怎么做才能通过代码而不是用户手来启动我的服务?如果我可以在我的客户端应用程序中执行此操作,或者在OnServiceAfterInstall调用之后自行执行此操作,那将是最好的.
这是一个示例StartService调用,AfterInstall事件:
procedure TServiceMainController.ServiceAfterInstall(Sender: TService);
var
Manager, Service: SC_HANDLE;
begin
Manager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Win32Check(Manager <> 0);
try
Service := OpenService(Manager, PChar(Name), SERVICE_ALL_ACCESS);
Win32Check(Service <> 0);
try
Win32Check(StartService(Service, 0, PChar(nil^)));
finally
CloseServiceHandle(Service);
end;
finally
CloseServiceHandle(Manager);
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是我不确定它会对你有用,因为通常你也应该取得成功net start.
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |