Lazarus进行Windows下服务和进程的管理

1、关于TServiceManager控件

WIKI上的内容很少,只有判断服务是否存在的代码(不能进行遍历所有服务,调用Services.Items是空的):
program ServiceTest;
// Check if a certain process is running.
{ KaTeX parse error: Expected 'EOF', got '}' at position 12: mode objfpc}̲{ H+}
uses
Classes,
SysUtils,
ServiceManager,
JwaWinSvc {for services declarations};

function IsServiceRunning(ServiceName: string): boolean;
{description Checks if a Windows service is running}
var
Services: TServiceManager;
ServiceStatus: TServiceStatus;
begin
//Check for existing services
//equivalent to sc query
Services := TServiceManager.Create(nil);
try
try
Services.Acces := SC_MANAGER_CONNECT; //Note typo in property.
//We don’t need more access permissions than this; by default
//the servicemanager is trying to get all access
Services.Connect; //Now connect with requested access level
Services.GetServiceStatus(ServiceName, ServiceStatus);
Result := (ServiceStatus.dwCurrentState = SERVICE_RUNNING);
Services.Disconnect;
except
on E: EServiceManager do
begin
// A missing service might throw a missing handle exception? No?
{LogOutput('Error getting service information for ’ + ServiceName +
'. Technical details: ’ + E.ClassName + ‘/’ + E.Message); }
Result := False;
raise; //rethrow original exception
end;
on E: Exception do
begin
{LogOutput('Error getting service information for ’ + ServiceName +
'. Technical details: ’ + E.ClassName + ‘/’ + E.Message); }
Result := False;
raise; //rethrow original exception
end;
end;
finally
Services.Free;
end;
end;

const
ServiceToTest = ‘SamSs’;

//Security Accounts Manager, should be running, at least on Vista
begin
WriteLn(‘Starting test for ’ + ServiceToTest + ’ service.’);
if IsServiceRunning(ServiceToTest) then
WriteLn(‘The ’ + ServiceToTest + ’ service is running’)
else
WriteLn(‘The ’ + ServiceToTest + ’ service is not running’);
end.

在https://forum.lazarus.freepascal.org/index.php/topic,59497.msg443560.html#msg443560上找到代码:首先是Access属性的值要设定,然后RefreshOnConnect应该置为TURE:
procedure TForm1.Button1Click(Sender: TObject);
var
Num_of_Services: longint;
i: Integer;
entry: TServiceEntry;
begin

servicemanager1.Access := SC_MANAGER_ALL_ACCESS;
ServiceManager1.RefreshOnConnect := True;
ServiceManager1.Connect();

Num_of_Services :&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Lazarus SQLite 是一个供 Lazarus 开发环境使用的轻量级数据库管理系统。SQLite 是一种嵌入式数据库,可以在没有服务器的情况下直接访问和操作数据库文件。 Lazarus 是一个跨平台的集成开发环境,主要用于 Free Pascal 编程语言。它支持多种操作系统,如 Windows、Linux 和 Mac OS X,并提供了开发图形用户界面(GUI)应用程序所需的各种工具和组件。 借助 Lazarus SQLite,开发者可以在他们的 Lazarus 项目中使用数据库功能。SQLite 是一个零配置、零管理的数据库引擎,非常适合嵌入式场景和小规模应用程序。使用 Lazarus SQLite,开发者可以无需安装或配置额外的数据库服务器,直接在程序中进行数据库操作。 Lazarus SQLite 提供了一组用于连接和操作 SQLite 数据库的组件和接口。开发者可以使用这些组件来创建、修改和查询数据库,执行 SQL 语句,以及处理数据库连接和事务等操作。Lazarus SQLite 具有简单易用的 API,程序员可以方便地操作 SQLite 数据库,实现数据的存取、修改和查询等功能。 与传统的关系型数据库相比,SQLite 是非常轻量级和灵活的。它的数据库文件以单个文件的形式存在,可以直接进行复制和传输。同时,SQLite 还支持事务处理、数据完整性控制和查询优化等一系列高级功能,可以满足多种应用场景的需求。 总之,Lazarus SQLite 提供了方便、快捷的数据库管理功能,支持开发者在 Lazarus 开发环境中进行 SQLite 数据库相关的操作。无论是开发小型应用程序还是嵌入式设备,Lazarus SQLite 都是一个理想的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远东999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值