【发布时间】:2011-08-06 05:41:24
【问题描述】:
我的以下代码在除 Windows 2008 R2 (SP0 & SP1) 之外的所有操作系统(32 位和 64 位)上都能正常运行
fSvcMgr := OpenSCManagerW(PwideChar(FOptions.ComputerName), nil,
SC_MANAGER_ALL_ACCESS);
if fSvcMgr = 0 then
begin
iserror := true;
RaiseLastWin32Error;
end;
...
fSvc := OpenServiceW(fSvcMgr, pwidechar(Service_name),SERVICE_ALL_ACCESS);
if fSvc = 0 then
begin
fSvc := CreateServiceW(fSvcMgr,
pwidechar(Service_name),
pwidechar(Service_name),
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
pwidechar(fServiceName), nil, nil, nil, nil, nil);
if fSvc = 0 then
begin
iserror := true;
RaiseLastWin32Error;
end;
end;
连接到远程 32 位机器时会发生这种情况:
当调试 delphi 在 CreateserviceW 行崩溃并显示消息“应用程序定义的异常(代码 0x000006d1)...进程停止时。 createserviceW 周围的 try/except 没有任何区别。
连接到远程 64 位机器时一切正常!
【问题讨论】:
-
您确定您的 scm 句柄有效吗?请显示更多代码...
-
句柄有效,添加额外代码
-
我发现了问题:在代码中的其他地方我使用了“ADsEnumerateNext”而不使用“ADsFreeEnumerator”,除了这种特殊情况(仅在win2008R2中)之外,这从未出现任何问题(通过事故)
标签: delphi delphi-2009 windows-server-2008-r2