File Associations?

Scott Morrow scott at elementarysoftware.com
Wed Mar 3 03:25:44 EST 2010


Hello Scott,
Sorry to clutter things with another post but there was one thing I forgot to include:  the actual content of the variables.  Sometimes the exact form of a string is what trips me up so perhaps this will be helpful.  I walked through the debugger as this section of code was running and copied out the contents of each variable.  (disclaimer: actually I *retyped* what I saw in the debugger window... there is probably a way to copy/paste but I couldn't recall it.)
-Scott Morrow

tProgramFilesFolderPath -->    C:/Program Files/Report Card Pro
tAppFolder -->                             C:/Program Files/Report Card Pro
tAppName -->                              Report Card Pro.exe
tAppExecutablePath -->            C:\Program Files\Report Card Pro\Report Card Pro.exe
tDocFileExtension -->                .rcp
tAppDocAssoc -->                      Report Card Pro document
tDefaultIconString -->                 C:\Program Files\Report Card Pro\Report Card Pro.exe,1
tSubKeyDblClickDocString --> C:\Program Files\Report Card Pro\Report Card Pro.exe %1


------------------------------------------------------------------------------------------------------------------------------
local lErrorLog

on SetWindowsRegistry
  put empty into lErrorLog

  put "Setting the registry" into fld "progressInfo" of cd "install" of stack "elsoInstaller"
  wait 1 sec
  set the customPropertySet of stack "elsoInstaller" to empty
  set the customPropertySet of stack "elsoInstallerLib" to empty
  -- tProgramFilesFolderPath  --> the path to the Programs folder -- < C:/Program Files >
  put fld "installPath" of cd "destination" of stack "elsoInstaller" into tProgramFilesFolderPath
  -- tAppFolder --> the name of OUR folder that contains the application we are installing -- < Report Card Pro >

  set the itemDel to "/"
  put item -1 of tProgramFilesFolderPath into tAppFolder
  --> put the uEnclosingFolderName of stack "elsoInstaller" into tAppFolder -- the user has control over this part of the path

  -- tAppName --> the name of the executable application we are installing -- < Report Card Pro >
  put the uAppName of stack "elsoInstaller" into tAppName
  -- tAppExecutablePath --> the fileName (Full Path) of the .exe
  put tProgramFilesFolderPath &"/"& tAppName into tAppExecutablePath
  -- save the full path in case we need to launch the app just before quiting this installer
  set the uLaunchPath  of stack "elsoInstaller" to tAppExecutablePath 
  replace "/" with "\" in tAppExecutablePath
  -- tDocExtension -- the "dot" extension that is associated with the application we are installing -- < .rcp >
  put the uFileExtention of stack "elsoInstaller" into tDocExtension
  if tDocExtension is empty then
     put "Ther was an error attempting to set the Registry because file extension information was missing" &cr after lErrorLog
     return "file extension missing"
     exit SetWindowsRegistry
  end if


  ------------------------------------------------------------------
  -- Set the Windows Registry if necessary --------
  ------------------------------------------------------------------
  -- Check to make sure the Windows Registry is set to associate the .rcp file extension with ReportCard_Pro
  if queryRegistry("HKEY_CLASSES_ROOT\"&tDocExtension&"\") <> tAppFolder then -- there is no Registry key for the file extension
     -- so let's set it up
     --1. Create a key in HKEY_CLASSES_ROOT for the extension, and use the default value to point to the name of the application
     -- get setRegistry("HKEY_CLASSES_ROOT\.tst\","TestApp")
     get setRegistry("HKEY_CLASSES_ROOT\"&tDocExtension&"\",tAppFolder)
     put the result into tResult
     if tResult is not empty then
        put "setRegistry error 1" && tResult &cr after lErrorLog -- Custom error reporting
        return tResult
     end if

     if lErrorLog is empty then
        --2. Create a key in HKCR for the application itself, using the default value to point to a descriptor of the kind of document used by the app 
        -- this will be used in list views to show the kind of file a document of TestApp is:
        -- get setRegistry("HKEY_CLASSES_ROOT\TestApp\","TestApp document")
        put tAppFolder && "document" into tAppDocAssoc
        get setRegistry("HKEY_CLASSES_ROOT\"&tAppFolder&"\",tAppDocAssoc)
        put the result into tResult
        if tResult is not empty then
           put "setRegistry error 2" && tResult &cr after lErrorLog -- Custom error reporting
           return tResult
        end if
     end if -- lErrorLog is empty

     if lErrorLog is empty then
        --3. Create a subkey of HKCR\TestApp to hold the default icon for the application. Rev document icons are in the first position
        -- get setRegistry("HKEY_CLASSES_ROOT\TestApp\DefaultIcon\","C:\Program Files\TestApp\TestApp.exe,1")
        put tAppExecutablePath & COMMA & "1" into tDefaultIconString
        get setRegistry("HKEY_CLASSES_ROOT\"&tAppFolder&"\DefaultIcon\",tDefaultIconString)
        put the result into tResult
        if tResult is not empty then
           put "setRegistry error 3" && tResult &cr after lErrorLog -- Custom error reporting
           return tResult
        end if
     end if -- lErrorLog is empty

     if lErrorLog is empty then
        --4. Create a subkey three layers deep in HKCR\ReportCard_Pro to hold the command to open the application when the document with the ".rcp" extension is launched. 
        -- The path to the document is defined in the registry as %1.
        -- get setRegistry("HKEY_CLASSES_ROOT\TestApp\shell\open\command\","C:\Program Files\TestApp\TestApp.exe %1")
        -- for my purposes the path will look like:
        -- C:/Program Files/Report Card Pro/ReportCard_Pro.exe
        put tAppExecutablePath&&"%1" into tSubKeyDblClickDocString
        get setRegistry("HKEY_CLASSES_ROOT\"&tAppFolder&"\shell\open\command\",tSubKeyDblClickDocString)
        put the result into tResult
        if tResult is not empty then
           put "setRegistry error 4" && tResult &cr after lErrorLog -- Custom error reporting
           return tResult
        end if -- tResult is not empty 
     end if -- lErrorLog is empty
  end if -- need to set the Windows registry
  ------------------------------------------------------------------

  return empty

end SetWindowsRegistry

-------------------------------------------------------------------------------------------------------------------------------
On Mar 2, 2010, at 10:48 PM, Scott Rossi wrote:

> Recently, I wrote:
> 
>>> For documents launching multiple instances see < relaunch >  in the
>>> dictionary 
>>> where there is a note to look at an example stack.
>> 
>> In my stack, the relaunch message is apparently not being called for some
>> reason.  I've tried placing it in the stack script and in a stack script
>> behavior, and still nothing is happening.  Still trying to figure out what's
>> going on.
> 
> Is it possible that the relaunch message is failing for me because I'm using
> a splash/data arrangement for my standalone?  My splash executable launches
> a data stack and then closes the launching stack.  Could this be why any
> subsequent launches of the EXE don't trigger the relaunch handler?
> 
> Regards,
> 
> Scott Rossi
> Creative Director
> Tactile Media, UX Design
> 
> 
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list