Creating A VFP Application As A Service - Calvin Hsia's WebLog - Site Home - MSDN Blogs
Creating A VFP Application As A Service - Calvin Hsia's WebLog - Site Home - MSDN Blogs
Normally, Creating a service is fairly complex, but creating a VFP application as a service is fairly straightforward,
thanks to a pair of tools called INSTSRV.EXE and SRVANY.EXE that come with the Windows Resource Kit.
INSTSRV.EXE takes 2 parameters: the name of the new service to install, and the full path to the SRVANY.EXE file.
For example, to create a service called “VFPSrv”, I ran this on my Windows XP machine:
C:\Program Files\Windows Resource Kits\Tools>instsrv VFPSrv "d:\Program Files\Windows Resource
Kits\Tools\srvany.exe"
SRVANY provides all the main work to pretend to be a service, and it will look in the registry to find what EXE file to
run to implement the service. The EXE name, the starting directory, and any optional parameters are found in the
registry.
Copy/paste the following to a file named VFPSRV.REG (change the paths as necessary: note the double
backslashes) and dbl-click the .REG file to add these entries to the registery.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VFPSrv\Parameters]
"AppDirectory"="d:\\fox90\\test"
"Application"="d:\\fox90\\test\\vfpsrv.exe"
"AppParameters"="myparm1 myparm2"
You can use the VFP command window to control the service:
!net start vfpsrv
!net stop vfpsrv
The sample service code below executes a file called “vfpsrvrtn.prg” when the timer fires. However, this code is not
built into the EXE. This means you can change the service’s behavior dynamically, without having to stop/rebuild/start
the service.
The code executes the timer event every 5 seconds, aligned to the 5 second real time clock (so that it occurs at
exactly :00, :05, :10, … seconds past the hour).
If you run the prg below, it will run as a normal VFP PRG, but it will also build VFPSRV.EXE.
To start it as a service, use the control panel->Administrative Tools->Services or “net start vfpsrv”
Open the log file in an automatically refreshing editor, such as Visual Studio, from another machine and then log off
the main machine. You can still hear the beeps and see the log file changing when no user is logged in.
(using older versions of SRVANY or on older versions of Windows, you may need to use SYS(2340) )
#define TIMERINT 5 && # of seconds for timer interval. Also syncs to TIMERINT
seconds for time of day
PUBLIC oService
oService=NEWOBJECT("vfpsrv")
oService.logstr("Starting Service: got some params: "+TRANSFORM(parm1)+"
"+TRANSFORM(parm2))
IF _vfp.StartMode>0 && if we’re running as an EXE
READ events && message loop
ENDIF
*RETURN
ENDDEFINE