Hi Randy
> I have been out of the Foxpro game for over 5 years. Can you tell me, please, just how in the world one does that ShellExecute call you are talking about to get the .reg entries into the system, and if I have to do it differently between "new" installs of the DSN and "update" installs, as you alluded to that DBA's might need if they move the database?
>
> This solution sounds like EXACTLY what I need!
The first thing you need is some code in your application to check for a newer version of the reg file on the server. Coincidentally Ken Murphy posted an example of this code today, in another thread, so I stole this from him:
As to creating an updater? Not too difficult. The key is the FDATE() function. Check it out in help.
IF FDATE([Path2MyLatestVersion\ODBC.REG],1) > FDATE([Path2MyClientVersion\ODBC.REG],1)
COPY FILE [Path2MyLatestVersion\ODBC.REG] TO [Path2MyClientVersion\ODBC.REG]
ENDIF
This should be called from your application start-up to copy a new file to the local machine. You then need to add a call to something to update the driver and then call an "Update Driver" function with the Path/Filename. This function can use the windows API call, ShellExecute, to run the .Reg file like this:
**********************************************************************
* Program......: ExecFile.prg
* Uses WinApi..: ShellExecute
* Function.....: Opens a file in the application that it's associated with.
* Parameters...: tcDocName - Name of the file to open
* Return Values:
* .............: 2 - Bad Association (e.g. invalid file name)
* .............: 31 - No application association
* .............: 29 - Failure to load application
* .............: 30 - Application is busy
* .............: Values over 32 indicate success
* .............: and return an instance handle for
* .............: the application started (e.g. a browser)
**********************************************************************
LPARAMETERS tcDocName
LOCAL lnRetVal, lnShow, lcAction
*** Check Parameters
IF VARTYPE( tcDocName ) # "C" OR EMPTY(tcDocName)
WAIT WINDOW "Must Pass a valid file name and extension" NOWAIT
RETURN
ENDIF
*** Must have an Extension too
IF EMPTY( JUSTEXT( tcDocName ))
WAIT WINDOW "Must Pass a valid file name and extension" NOWAIT
RETURN
ENDIF
*** Declare API function
DECLARE INTEGER ShellExecute IN Shell32.dll ;
LONG HWnd, ;
STRING cAction, ;
STRING cFileName, ;
STRING cParameters, ;
STRING cPath, ;
INTEGER nShowWindow
*** Now execute it
lnRetVal = ShellExecute( 0, 'Open', tcDocName, "", "", 5)
RETURN lnRetVal
Regards
Andy Kramek
Microsoft MVP (Visual FoxPro)
Tightline Computers Inc, Akron Ohio, USA