2

我有一个 Windows 服务,它在其中创建一个 WindowClass。此窗口将用于在 2 个程序之间进行 IPC(进程间通信)。

该服务在以下情况下 100% 正确运行:

  • 视窗
  • Windows Vista(32 位和 64 位)
  • Windows 7(32 位和 64 位)
  • Windows 8(32 位和 64 位)
  • 视窗服务器 2003
  • Windows Server 2008 R2(32 位和 64 位)

仅在Windows Server 2008 Standart上它不起作用,导致错误:

 System Error. Code: 8. Not enough storage is available to process this command.

这是代码:

constructor TMyIPC.Create;

  function _CreateUUID: string;
  var
    g: TGUID;
  begin
    if CreateGUID(g) = S_OK then
      Result := GUIDToString(g)
    else
      Result := FormatDateTime('yyyyMMddhhnnsszzz', now);
  end;

begin
  FillChar(fWndClass, sizeOf(fWndClass), 0);
  with fWndClass do
  begin
    lpfnWndProc := @DefWindowProc;
    lpszClassName := StrNew(PChar(_CreateUUID));
  end;

  fObjectInst := classes.MakeObjectInstance(WndProc);

  if RegisterClass(fWndClass) = 0 then
    RaiseLastOSError;

  fHandle := CreateWindow(fWndClass.lpszClassName, fWndClass.lpszClassName,
    WS_POPUP or WS_CAPTION or WS_CLIPSIBLINGS or WS_SYSMENU
    or WS_MINIMIZEBOX,
    GetSystemMetrics(SM_CXSCREEN) div 2,
    GetSystemMetrics(SM_CYSCREEN) div 2,
    0, 0, 0, 0, HInstance, nil);

  if fHandle = 0 then
    RaiseLastOSError;  

  SetWindowLong(fHandle, GWL_WNDPROC, Longint(fObjectInst));
end;

我已经验证了这个问题系统错误。代码:8。没有足够的存储空间来处理这个命令,但事实并非如此(我在 VCL 应用程序中运行相同的代码并且没有发生错误,它只发生在服务内部运行)。

4

0 回答 0