我有一个 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 应用程序中运行相同的代码并且没有发生错误,它只发生在服务内部运行)。