Foxpro Can't Seem to Find Word 2007 under Windows 7

Guys, I have a snippit of code that I have used for years to detect if a application exists under Windows, but it does not see to work with Windows 7.  Am I missing something.

If is look for a return from Checksserver('Word.application'), under Windows Vista and back on my machine it returns .T., but under Windows 7, .F.:


FUNCTION Checkserver
      LPARAMETER cServerName
      LOCAL oRegistry, cClassID, cEXEName, lEXEExists, ;
            aClassIDValues, aClassIDValues, aServerNameValues

      IF VERSION() = "Visual FoxPro 06" .OR. .T.
            oRegistry = NEWOBJECT("Registry", "Registry.vcx")
      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
ENDFUNC

fmoore0001Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

 
tusharkanvindeCommented:
You can try something like

llWordExists=.T.
TRY
   loWord=CREATEOBJECT('Word.Application')
   loWord.quit
CATCH
  llWordExists=.F.
ENDTRY
RETURN llWordExists
0

Experts Exchange Solution brought to you by ConnectWise

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
 
CaptainCyrilFounder, Software Engineer, Data ScientistCommented:
It could be that the registry checker is not working fine.

What I do is the same as tusharkanvinde. I try to run the automation object and trap the error and I don't include version numbers.
I use Excel.Application vs. Excel.Application.12.

I use VAL(VERSION(4)) to get a version number of FoxPro.
0
 
fmoore0001Author Commented:
Thanks.  You let me to a variation that was able to detect Word from Windows Server 2000 to Windows 7.  Thanks!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.