Menu

#452 Win32 installer for 4.1.1 enhancements / changes

None
open
nobody
5
2013-12-27
2012-05-23
No

After running 4.1.1.7797 install on a machine (XP Pro SP3 etc) which had had a previous 4.0.0 install completely removed (including my trawling through the registry to remove remnants the uninstall did not remove), I find that Windows Explorer sees all three file extensions (.rex .rexh .rexp) as identical; running any of these types of program by a double-click causes them to run under rexxpaws.exe.

The reason is that in the install dialog there's no checking that the "file type" text one provides (defaults RexxScript, RexxHide, RexxPaws) are single words. I had no idea that they should be, because - as a Windows user - I'm used to seeing multiword values in the Window Explorer 'File Type' column. Indeed, with V4.0.0 I had my own definitions in the registry to make what was shown in these columns for each ooRexx filetype show up as several words... so this is what I thought I was telling the installer to do.

The values I provided to the installer have actually been correctly saved in the registry in an uninstall key:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ooRexx

RexxAssociation REG_SZ .rex ooRexx cmdwin
RexxHideAssociation REG_SZ .rexh ooRexx hidden
RexxPawsAssociation REG_SZ .rexp ooRexx paused

Clearly what's happened is that only the first word of the phrases I supplied has been used in file associations. Using the 'assoc' command I see the 3 extensions defined as:

.rex=ooRexx .rexh=ooRexx .rexp=ooRexx

and HKEY_CLASSES_ROOT.rex and HKEY_CLASSES_ROOT.rexh and HKEY_CLASSES_ROOT.rexp

all have value: (Default) REG_SZ ooRexx which I assume points to the value in

 HKEY_CLASSES_ROOT\ooRexx

whose subkeys define rexxpaws.exe. (I assume the installer did make three definitions but as they were all for "ooRexx" only the third one (which I think would have been rexxpaws, it being preceded by rexxhide and rexx) survives. So all filetypes have the same action.

Slightly less easy to understand is why there's a definition at

HKEY_CLASSES_ROOT\Applications\rexxpaws.exe

but nothing corresponding to that for rexx.exe and rexxhide.exe I've not looked exhaustively for all discrepancies.

In Windows Explorer what I actually see in the FileType column is the text:

ooRexx Rexx pausing Program

which is defined in key HKEY_CLASSES_ROOT\ooRexx as (Default) REG_SZ ooRexx Rexx pausing Progam

In V400 I had my own definitions in the three corresponding places. To be honest I don't want to see something as long-winded as this default text especially with "ooRexx" and "Rexx" in the text. I really think this user-facing text should be settable by the user..

In my old V400 definitions the structure I had was:

HKEY_CLASSES_ROOT.REX
(Default) REG_SZ REXXScript <==== supplied by the V400 installer I assume

HKEY_CLASSES_ROOT.rexh
(Default) REG_SZ rexh_auto_file <==== set by me, modelled on eg Python file types, I think

HKEY_CLASSES_ROOT.rexp
(Default) REG_SZ rexp_auto_file <==== set by me, modelled on eg Python file types, I think

then

HKEY_CLASSES_ROOT\Applications\rexx.exe
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\Applications\rexx.exe\shell
(Default) REG_SZ open <=== don't know why this is here

HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open
(Default) REG_SZ Run <=== don't know why this is here

HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV3201\rexx.exe" "%1" %*
<==== clearly not recently used, where did that V3201 come from?

HKEY_CLASSES_ROOT\Applications\rexxhide.exe
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxhide.exe\shell
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxhide.exe\shell\open
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxhide.exe\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxhide.exe" "%1"

HKEY_CLASSES_ROOT\Applications\rexxpaws.exe
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxpaws.exe\shell
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxpaws.exe\shell\open
(Default) REG_SZ (not set) <== added by me, worked fine

HKEY_CLASSES_ROOT\Applications\rexxpaws.exe\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxpaws.exe" "%1"

and

HKEY_CLASSES_ROOT\rexh_auto_file
(Default) REG_SZ ooREXX hidden <==== my filetype text

HKEY_CLASSES_ROOT\rexh_auto_file\shell
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\rexh_auto_file\shell\open
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\rexh_auto_file\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxhide.exe" "%1"

HKEY_CLASSES_ROOT\rexp_auto_file
(Default) REG_SZ ooREXX paused <==== my filetype text

HKEY_CLASSES_ROOT\rexp_auto_file\shell
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\rexp_auto_file\shell\open
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\rexp_auto_file\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxpaws.exe" "%1"

and stuff presumably set by the V400 installer:

HKEY_CLASSES_ROOT\REXXScript
(Default) REG_SZ ooRexx Rexx Program

HKEY_CLASSES_ROOT\REXXScript\DefaultIcon
(Default) REG_SZ C:\Program Files\~O-folder\ooRexxV400\rexx.exe,0

HKEY_CLASSES_ROOT\REXXScript\shell
(Default) REG_SZ open <=== don't think that value is needed

HKEY_CLASSES_ROOT\REXXScript\shell\edit
(Default) REG_SZ Edit <=== don't think that value is needed

HKEY_CLASSES_ROOT\REXXScript\shell\edit\command
(Default) REG_SZ notepad.exe "%1"

HKEY_CLASSES_ROOT\REXXScript\shell\open
(Default) REG_SZ Run <=== don't think that value is needed

HKEY_CLASSES_ROOT\REXXScript\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexx.exe" "%1" %*

HKEY_CLASSES_ROOT\REXXScript\shellex
(Default) REG_SZ (not set)

HKEY_CLASSES_ROOT\REXXScript\shellex\DropHandler
(Default) REG_SZ {60254CA5-953B-11CF-8C96-00AA00B8708C}

and

HKEY_CURRENT_USER\Software\Classes\Applications\rexxhide.exe
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxhide.exe\shell
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxhide.exe\shell\open
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxhide.exe\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxhide.exe" "%1"

HKEY_CURRENT_USER\Software\Classes\Applications\rexxpaws.exe
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxpaws.exe\shell
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxpaws.exe\shell\open
(Default) REG_SZ (not set)

HKEY_CURRENT_USER\Software\Classes\Applications\rexxpaws.exe\shell\open\command
(Default) REG_SZ "C:\Program Files\~O-folder\ooRexxV400\rexxpaws.exe" "%1"

I see some of my old settings had args "%1" while others had "%1" %* but I understand why that is;probably they should all be the latter.:

As well as these issues, I tried right clicking a .rexh file in Windows Explorer and choosing "Open With...". In the dialog
that comes up the recommended program is described as:

    <icon> Open Object Rexx Interface

which gives no clue at all which .exe it means. Likewise if one or more executables are listed in "Other Programs". You
can't tell them apart, so you always have to click "Browse" and go and find the executable you want to use as click it.

The text shows up in the registry in the MUICache associated with the filepath to each of the executables. (IIRC MUICache
is for cacheing values that are locale-dependent in the windows user interface.) If you look at the three executables in
Windows Explorer they all have this value in their "Description" field. Really, it should differ a little...

If I make changes to MUICache entries using regedit the new texts show up instantly in "Open With..." dialogs etc. I've
always meant to use an exec to load differing texts into MUICache after every reboot, and never got around to it, but it
would be better if it was fixed at source.

Lastly, PATHEXT has been updated with the three new file extensions and looks like:

 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1;.rex;.rexh;.rexp

but I wonder if the new entries should be in uppercase like all the others?

Just at the moment I can't quite decide whether I should fix all the registry issues by hand (after all I do know what's needed where), or whether I should uninstall (which might not work properly either) then reinstall providing different single-token 'filetype' values so at least I'll have what you guys intended. Hmm. Neither is all that attractive, if there might be a revised installer coming along in due course...

Discussion

  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-24

    I decided to uninstall and reinstall. in the second install I left the filetype values at their defaults (though changed .rexg to .rexh) and things worked much better.

    I noticed though that the texts displayed in the Window Explorer FileType columns all have a spelling mistake... They say:

    .rex "ooRexx Rexx Progam"
    .rexh "ooRexx Rexx GUI Progam"
    .rexp "ooRexx Rexx pausing Progam"

    Program has two "R"s in it...

     
  • Mark Miesfeld

    Mark Miesfeld - 2012-05-26

    Committed revision 7799. fixes spelling error: Progam
    Committed revision 7800. bug fix branch

     
  • Mark Miesfeld

    Mark Miesfeld - 2012-05-26

    Committed revision 7801.
    Committed revision 7802. in bug fix branch

    The commits listed in this tracker item address these issues:

    1.) Fix spelling error Progam.

    2.) Add text to the labels for the file extension and file type name saying "(no spaces)"

    3.) Check the user entered values for those fields for spaces. If found put up a message saying the values can not contain space and return the user to the page.

    4.) Upper case the extension when writing the PATHEXT, to match what Microsoft does.

    Jeremy, I appreciate all the detail you've gone to in describing this bug you opened. But, it is a little difficult for me to sort out what all needs to be fixed. So, if there is something else you think needs to be addressed would you open a separate bug for it. I'm marking this one as fixe.

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27
     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27
     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    OK... First the "no spaces" thing: something else that occurs to me is to ask whether the installer checks that the user provides 3 different values for the "filetype" tokens? Because if not, the actions they'll map on to will not be separated in the registry.

    TBH I don't understand why you bother asking the user for "filetype" values. In XP I have never seen those values displayed anywhere in the GUI. Of course you can see that 'assoc' shows that (eg) .rexh is filetype 'RexxHide', but so what? If the value the user provides isn't visible to the user why ask them to provide it? It'd be simpler if you just automatically used values like
    "rexh_auto_file".

    The real work is done by the registry key that defines what that label, eg "rexh_auto_file" is. The installer creates a key:

    HKEY_CLASSES_ROOT\<thatlabel>
    (Default) REG_SZ ooRexx Rexx GUI Progam

    I don't like the text values you create by default - long winded (eg rexxpaws's "ooRexx Rexx pausing Progam") and in rexxhide's case, not even accurate. A .rexh exec is NOT a "ooRexx Rexx GUI Progam"; it's a program that one doesn't want output from. Nearly all my .rexh execs are automatically scheduled by Windows' Scheduled Tasks and generate nothing except log files. Of course if one is writing an ooDialog program it makes sense to use .rexh, but that doesn't mean all .rexh execs are GUI execs.
    Anyway, if you must ask the user to provide a "filetype" value, it would be better to use what they provide to populate this field and use your own internal labels for "rex_auto_file", "rexxh_auto_file", "rexp_auto_file" etc, ie <suppliedextension>_auto_file" in each case.

    I change the values you provide (manually in the past, but now with an exec that I run after your install is finished) to acheive terser and more accurate values in HKEY_CLASSES_ROOT\<thoselabels>; the values I set are "ooREXX cmdwin" (for .rex), "ooREXX hidden" and "ooREXX paused". These then show up in Windows Explorer's FileType column, and in the WE Properties pane for a rexx exec. See screenshot for a rexx-exec's properties.

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27
     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    On the screenshot for a rexx exec's properties you'll also see that the "Opens with" value shown has been altered by me, to say "ooRexx hidden interpreter" though the field is too narrow to display the whole of "interpreter". The value your installer would place there is "Open Object Rexx Interface", and it's the same value for the three executables, so one cannot tell just from that value alone which one would be used. This matters more if you right-click a rexx exec in WE and choose Open With... to change the program that's going to be used, because what Windows shows you is a list of programs represented by their icons and descriptions... not including the actual filenames. See screenshot for the OpenWith display. The default display (before I changed it) would have shown

    Recommended Programs
    Open Object Rexx Interface
    Open Object Rexx Interface

    making it impossible for anyone to choose which program to use. The text "Open Object Rexx Interface" also shows up in various other places, eg in Zone Alarm's "Program Control" options, and the WE Properties display for an executable (see screenshot for rexxhide.exe). Zone Alarm & WE Properties both read the value directly out of the .exe file concerned, so it would be MUCH better if you changed the three executables so they had something that discriminates between them in whatever field of an executable's definition that requires. The same is true for the ooRexx DLLs which just have "Open Object Rexx Component" in them, but a user's unlikely to see that very often (it's shown in ZA's DLL control display, but that fortunately does list each DLL's actual leafname as well).

    Although the real value of this field is extracted from an .exe by WE and ZA, for routine display of an .exe's "description" in the Windows GUI, and to allow different descriptions in different locales, Windows caches the description text in, for me

    HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache (and possibly if I had a roaming profile, elsewhere)

    As this is a cache any change I make to it doesn't stick, but gets recreated (from the literal in the .exe files) at reboot. I've now written an exec to recreate the cache entries every time I log in to Windows, since there's no way I can change the literals in the .exe's themselves... which I think you should do. I change them to "ooRexx cmdwin interpreter","ooRexx hidden interpreter" and "ooRexx paused interpreter". The OpenWith dialog now shows a useful choice...

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    There's also a screenshot of WE's Properties pane for one of the executables - rexxhide.exe. Despite the fact that I've changed the MUICache entry for rexxhide, to say "ooRexx hidden interpreter" as the other screenshots show, because WE's Properties thing reads the unchanged executable, this shows the fairly useless "Open Object Rexx Interface" text.

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    I also commented on the structure of a typical KKCR\Applications\<executable> key, for example this one created by the installer a few days ago:

    HKEY_CLASSES_ROOT\Applications\rexx.exe
    (Default) REG_SZ (not set)

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell
    (Default) REG_SZ open <=== don't know why this is here

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open
    (Default) REG_SZ Run <=== don't know why this is here

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open\command
    (Default) REG_SZ "C:\My Dropbox\Programs-IPCLP\~open-source ooRexx V4-1-1\rexx.exe" "%1" %*

    The values "open" and "Run" in the \shell and \shell\open subkeys are unnecessary. It works fine if you just have:

    HKEY_CLASSES_ROOT\Applications\rexx.exe
    (Default) REG_SZ (not set)

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell
    (Default) REG_SZ (not set)

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open
    (Default) REG_SZ (not set)

    HKEY_CLASSES_ROOT\Applications\rexx.exe\shell\open\command
    (Default) REG_SZ "C:\My Dropbox\Programs-IPCLP\~open-source ooRexx V4-1-1\rexx.exe" "%1" %*

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    There's also unnecessary values in, eg,

    HKEY_CLASSES_ROOT\RexxHide

    where the intermediate subkeys have "open", "Edit", "Run" etc in them to no purpose.

     
  • Mark Miesfeld

    Mark Miesfeld - 2012-05-27

    Jeremy,

    None of the addtional things you listed are bugs. They are things you personally don't like about how the installer works.

    There are two ways in this project to get things changed that are not bugs.

    1.) You can open up a Feature Request tracker item to request the change. We usally call Feature Requests RFEs.

    2.) You can modify the source code youself and submit a patch that makes the change you want. The Windows installation package is created using NSIS, a free open source software framework used to create Windows installers. You can find out all the details of using NSIS on their website. When you download NSIS, you have everything you need except for a text editor to create an installation package. You don't need any special tools.

    To create a patch, I think TortoiseSVN is the easist to use for someone not familar with version control systems or SVN itself. It is also free to download.

    You now know more than I did when I first set out to fix a bug in the installer.

    If you would like, I can change this tracker item to a RFE so that all the context you've put in will remain in the item. You might be able to do that yourself, I'm not sure how many of the fields are changable by the submitter of the tracke item. Just change Tracker: Bugs to Tracker: Feature Requests.

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    You're absolutely right, not bugs as such. I bow down and grovel...

    I'll see if I can change it to an RFE...

     
  • Jeremy Nicoll

    Jeremy Nicoll - 2012-05-27

    Nope; "Tracker" can't be changed at all.

     
  • Mark Miesfeld

    Mark Miesfeld - 2012-05-28

    Moving the remainder of the items Jeremy has brought up to a RFE.

    1.) One item would be changing the "Open Object Rexx Interface" text which shows up in a number of places in Windows.

    This has been brought up in the past by some other users, Rony for one.

    The text itself comes from the version resource bound to the executable at link time. Currently the same version resource is bound to all the executables, execept rxapi.exe.

    It makes sense for each executable to have its own version resource. Other than that, the only other thing that needs to be done is to arrive at some sort of consensus as to what the text should be.

    Jeremy - your best chance of moving this along would be to start a discussion on the developers list as to what the text should be.

    For the additional items, if you can generate some discussion as to what the text you want changed should be, along with even a hazy consensus to that text, I probably won't object to changing it. Please try to list each single item like I did with #1 above so that it can be checked off as done or not done. Thanks for that.

     

Anonymous
Anonymous

Add attachments
Cancel