* CheckServer.PRG * Published in _Microsoft Office Automation with Visual FoxPro_, * Hentzenwerke Publishing, June, 2000. * www.hentzenwerke.com * Copyright 2000 by Tamar E. Granor and Della Martin All Rights Reserved 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 lEXEExists