【问题标题】:Delphi 2009 Crashes on CreateServiceW (only in windows 2008 R2)Delphi 2009 在 CreateServiceW 上崩溃(仅在 windows 2008 R2 中)
【发布时间】: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


【解决方案1】:

对 CreateService 的调用会生成对 RCreateServiceWRCreateServiceWOW64 的 RPC 调用。 RPC 调用返回 0x000006d1 代表 RPC_S_PROCNUM_OUT_OF_RANGE,这意味着底层 RPC 层失败(请求的 opnum 不存在)。这可能是一个错误...

【讨论】:

  • 我尝试从 windows 7 - 32 位嵌入 advapi32.dll 文件并从这个 DLL 运行 CreateService,错误是一样的。正如真正伦理所暗示的那样,它可能与安全功能有关。
【解决方案2】:

该错误在 Microsoft SBS Server 2011 上也很明显。

您遇到的问题似乎是基于海拔的,您没有在具有正确海拔的用户范围内运行应用程序。

您是否尝试将清单添加到您的应用程序以确保它被正确提升,此外为了测试您可能希望编译应用程序(调用者)并使用管理员的凭据运行。

请务必注意,Microsoft Windows 2008 和 2011 具有范围限制,因为您不能与比您自己更低或更高级别的进程或服务进行交互。这个安全功能引起了很多麻烦。

因此,如果您海拔,请尝试不使用。

【讨论】:

  • 谢谢,但我尝试启用和禁用 UAC,使用 requireAdministrator uac.manifest 和不使用(问题相同)
  • @WilfriendVS - 我们能否提供更多代码,因为一旦考虑到 UAC 考虑因素,我无法重现此问题。
猜你喜欢
  • 2011-01-01
  • 1970-01-01
  • 2014-09-05
  • 2012-09-18
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多