-
+
PostgreSQL>]]>
+
+
Registering eventlog> on
+ class="osname">Windows>:
+ To register a
Windows> eventlog>
+ library with the operating system, issue this command after installation:
+
+regsvr32 pgsql_library_directory>/pgevent.dll>
+
+ This creates registry entries used by the event viewer.
+
+
+
Uninstallation:
# Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
-# $PostgreSQL: pgsql/src/bin/Makefile,v 1.44 2004/06/18 21:24:05 tgl Exp $
+# $PostgreSQL: pgsql/src/bin/Makefile,v 1.45 2004/06/20 01:32:47 momjian Exp $
#
#-------------------------------------------------------------------------
DIRS := initdb ipcclean pg_ctl pg_dump \
psql scripts pg_config pg_controldata pg_resetxlog
+ifeq ($(PORTNAME), win32)
+DIRS+=pgevent
+endif
all install installdirs uninstall depend distprep:
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
--- /dev/null
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pgevent
+#
+# Copyright (c) 1996-2004, PostgreSQL Global Development Group
+#
+#-------------------------------------------------------------------------
+
+subdir = src/bin/pgevent
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+OBJS=pgevent.o pgmsgevent.o
+NAME=pgevent.dll
+
+all: $(NAME)
+
+install: all install-lib
+
+pgevent.dll: $(OBJS) pgevent.def
+ dllwrap --def pgevent.def -o $(NAME) $(OBJS)
+
+pgmsgevent.o: pgmsgevent.rc
+ windres pgmsgevent.rc -o pgmsgevent.o
+
+all-lib: $(NAME)
+
+install-lib: $(NAME)
+ $(INSTALL_STLIB) $< $(DESTDIR)$(libdir)/$<
+
+uninstall-lib:
+ rm -f $(DESTDIR)$(libdir)/$(NAME)
+
+clean:
+ rm -f $(OBJS) $(NAME)
+
+clean-lib:
+ rm -f $(NAME)
--- /dev/null
+The files attached with this mail have to be stored in pgevent directory.
+MSG000001.bin is a bin files, result of Microsoft MC compiler. MC compiler
+can be downloaded for free with MS Core SDK but it is not included with MSYS
+tools and I didn't find a alternative way to compile MC file.
+
+To summarize MC pgmsgevent.mc command generates pgmsgevent.h
+pgmsgevent.rc and MSG00001.bin files. In MC file, we declare a string
+with %s format, so we can write anything we want in the future without
+need to change the definition of this string.
+
+To finish, because DllUnregisterServer and DllRegisterServer are system
+defined entry point, we need to export these two functions with their names
+without "decoration", so we cannot uses auto generated .def files without
+handy modifications.
+
+Laurent Ballester
+
+
--- /dev/null
+/*-------------------------------------------------------------------------
+ *
+ * pgevent.c
+ * Defines the entry point for pgevent dll.
+ * The DLL defines event source for backend
+ *
+ *
+ * IDENTIFICATION
+ * $PostgreSQL: pgsql/src/bin/pgevent/pgevent.c,v 1.1 2004/06/20 01:32:49 momjian Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+#include "windows.h"
+#include "olectl.h"
+#include "string.h"
+
+/* Global variables */
+HANDLE g_module = NULL; /* hModule of DLL */
+
+/* Prototypes */
+STDAPI DllRegisterServer(void) ;
+STDAPI DllUnregisterServer(void);
+BOOL WINAPI DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved );
+
+/*
+ * DllRegisterServer --- Instructs DLL to create its registry entries
+ */
+
+STDAPI DllRegisterServer(void)
+{
+ HKEY key;
+ DWORD data;
+ char buffer[_MAX_PATH];
+
+ /* Set the name of DLL full path name. */
+ if (!GetModuleFileName((HMODULE)g_module, buffer, sizeof(buffer)))
+ {
+ MessageBox(NULL, "Could not retrieve DLL filename", "PostgreSQL error", MB_OK|MB_ICONSTOP);
+ return SELFREG_E_TYPELIB;
+ }
+
+ /* Add PostgreSQL source name as a subkey under the Application
+ key in the EventLog registry key. */
+ if ( RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL", &key) )
+ {
+ MessageBox(NULL, "Could not create the registry key.", "PostgreSQL error", MB_OK|MB_ICONSTOP);
+ return SELFREG_E_TYPELIB;
+ }
+
+ /* Add the name to the EventMessageFile subkey. */
+ if (RegSetValueEx(key,
+ "EventMessageFile",
+ 0,
+ REG_EXPAND_SZ,
+ (LPBYTE) buffer,
+ strlen(buffer) + 1))
+ {
+ MessageBox(NULL, "Could not set the event message file.", "PostgreSQL error", MB_OK|MB_ICONSTOP);
+ return SELFREG_E_TYPELIB;
+ }
+
+ /* Set the supported event types in the TypesSupported subkey. */
+ data = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
+
+ if (RegSetValueEx(key,
+ "TypesSupported",
+ 0,
+ REG_DWORD,
+ (LPBYTE) &data,
+ sizeof(DWORD)))
+ {
+ MessageBox(NULL, "Could not set the supported types.", "PostgreSQL error", MB_OK|MB_ICONSTOP);
+ return SELFREG_E_TYPELIB;
+ }
+
+ RegCloseKey(key);
+ return S_OK;
+}
+
+/*
+ * DllUnregisterServer --- Instructs DLL to remove only those entries created through DllRegisterServer
+ */
+
+STDAPI DllUnregisterServer(void)
+{
+ /* Remove PostgreSQL source name as a subkey under the Application
+ key in the EventLog registry key. */
+
+ if ( RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL") )
+ {
+ MessageBox(NULL, "Could not delete the registry key.", "PostgreSQL error", MB_OK|MB_ICONSTOP);
+ return SELFREG_E_TYPELIB;
+ }
+ return S_OK;
+}
+
+/*
+ * DllMain --- is an optional entry point into a DLL.
+ */
+
+BOOL WINAPI DllMain( HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ if ( ul_reason_for_call == DLL_PROCESS_ATTACH )
+ {
+ g_module = hModule;
+ }
+ return TRUE;
+}
+
--- /dev/null
+; dlltool --output-def pgevent.def pgevent.o pgmsgevent.o
+EXPORTS
+ DllUnregisterServer=DllUnregisterServer@0 @ 1;
+ DllRegisterServer=DllRegisterServer@0 @ 2;
--- /dev/null
+//
+// Values are 32 bit values layed out as follows:
+//
+// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+// +---+-+-+-----------------------+-------------------------------+
+// |Sev|C|R| Facility | Code |
+// +---+-+-+-----------------------+-------------------------------+
+//
+// where
+//
+// Sev - is the severity code
+//
+// 00 - Success
+// 01 - Informational
+// 10 - Warning
+// 11 - Error
+//
+// C - is the Customer code flag
+//
+// R - is a reserved bit
+//
+// Facility - is the facility code
+//
+// Code - is the facility's status code
+//
+//
+// Define the facility codes
+//
+
+
+//
+// Define the severity codes
+//
+
+
+//
+// MessageId: PGWIN32_EVENTLOG_MSG
+//
+// MessageText:
+//
+// %1.
+//
+#define PGWIN32_EVENTLOG_MSG 0x00000000L
+
--- /dev/null
+MessageId=0
+SymbolicName=PGWIN32_EVENTLOG_MSG
+Language=English
+%1.
+.
--- /dev/null
+LANGUAGE 0x9,0x1
+1 11 MSG00001.bin