* 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>