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