* CheckServer.prg * © 2000, Tamar E. Granor and Della Martin * From: Microsoft Office Automation with Visual FoxPro * Hentzenwerke Publishing. www.hentzenwerke.com LPARAMETER cServerName LOCAL oRegistry, cClassID, cEXEName, lEXEExists, ; aClassIDValues, aClassIDValues, aServerNameValues IF VERSION() = "Visual FoxPro 06" oRegistry = NewObject("Registry", HOME() + "FFC\Registry") ELSE SET PROCEDURE TO HOME() + "samples\classes\registry.prg" ADDITIVE oRegistry = CreateObject("Registry") ENDIF lEXEExists = .F. DECLARE aClassIDValues[1], aServerNameValues[1] WITH oRegistry * Find the CLSID of the server. First, look for * the Class's Key. IF .OpenKey(cServerName + "\CLSID") = 0 * The Class's Key is open, now enumerate its values .EnumKeyValues(@aClassIDValues) * The data portion of the first (only) value returned * is the CLSID. Find the LocalServer32 key for the CLSID IF .OpenKey("CLSID\" + aClassIDValues[1,2] + "\LocalServer32") = 0 * Enumerate the LocalServer32 values .EnumKeyValues(@aServerNameValues) * The EXE file is stored in the first (only) data value returned. cEXEName = aServerNameValues[2] * The value that's returned may have " -Automation" or " /Automation" or * " /AUTOMATION" & other trailing stuff at the end. Strip it off. IF "AUTO" $ UPPER(cEXEName) cEXEName = LEFT(cEXEName, ATC("AUTO", UPPER(cEXEName)) - 2) ENDIF * Verify that the file exists lEXEExists = FILE(cEXEName) ENDIF ENDIF ENDWITH RETURN lEXEExistsHope this helps,