#1238 Windows installer fails to detect that uninstaller failed

v4.2.0
closed
Mark Miesfeld
installer (2)
complete
5
2014-04-15
2014-01-21
Mike Cowlishaw
No

During install of REXX-ooRexx_4.2.0(MT)_32-bit 6.04 19 Jan 2014 the uninstall of previous version finished normally. The following Install started automatically; I entered all the details, editor file path, etc., but then the installation failed: "Unable to open rexx.dll for write". There was no Rexx or rxapi process in the task manager list. I had to abort the install (which lost the changes I had made) and reboot before I could install ooRexx [and of course my reboot process uses Rexx a lot, so it was a mess...].

OpSys = Windows 7, fully upto-date.

Discussion

1 2 > >> (Page 1 of 2)
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-21

    Hi Mike,

    Sorry you are having so much trouble with the release candidate. But, I don't have any idea why you would get the message.

    In general I think the message comes from the operating system and if the operating system says it can't open the file, then it can't.

    I don't suppose you looked in the installation directory to see if rexx.dll still existed at the point of the error message, you probably would have mentioned it. It seems possible to me that rexx.dll couldn't be deleted during the uninstall.

     

  • Anonymous
    2014-01-21

    Hi Mark, no I didn't actually look in the directory to see if rexx.dll existed. Like you, I assumed it did and the uninstall failed to delete it.

    [I have a vague memory that this also happened last time I installed (4.1.x) but I didn't have time to report/investigate then.]

     

  • Anonymous
    2014-01-21

    [No idea why that one showed as 'Anonymous .. I was/am logged in. MFC]

    OK, I just did a re-install (4.2.0 over 4.2.0), taking notes.
    a) Uninstall was normal, clicked Next on all settings.
    b) Install needed no changes to settings (saved from earlier today), so again, just clicked Next on all.
    c) Again install failed (unable to write rexx.dll).
    d) I went to the \Program Files\oorexx directory (dir is below) and many files were there. I could not delete rexx.dll, even from an Administrator command line (access denied).
    e) Only way, it seems, was a reboot. After the reboot, installed fine.

    Mike

    Dir after the uninstall had finished and Install window was up:

    Directory of C:\Program Files\ooRexx

    21/01/2014 17:00 <DIR> .
    21/01/2014 17:00 <DIR> ..
    20/01/2014 03:32 55,296 ooDialog.com
    20/01/2014 03:32 460,800 ooDialog.exe
    20/01/2014 03:31 120,320 orexxole.dll
    20/01/2014 03:31 861,696 rexx.dll
    20/01/2014 03:31 54,784 rexx.exe
    20/01/2014 03:31 740,348 rexx.img
    20/01/2014 03:25 126,464 rexxapi.dll
    20/01/2014 03:31 53,248 rexxc.exe
    20/01/2014 03:31 53,760 rexxhide.exe
    20/01/2014 03:31 55,808 rexxpaws.exe
    20/01/2014 03:31 192,512 rexxutil.dll
    20/01/2014 03:26 95,232 rxapi.exe
    20/01/2014 03:31 52,736 rxqueue.exe
    20/01/2014 03:31 47,616 rxsubcom.exe
    21/01/2014 17:00 0 uninstall.log
    15 File(s) 2,970,620 bytes

     
    Last edit: Mike Cowlishaw 2014-01-21
  • Rick McGuire
    Rick McGuire
    2014-01-21

    You didn't by chance still have your ELAP shell active when you tried to install? Perhaps that's why the old files couldn't be removed.

     

  • Anonymous
    2014-01-21

    No, very careful about that -- and as I mentioned, no Rexx-related process showed in task manager.

     

  • Anonymous
    2014-01-21

    [sigh 'Edit' doesn't work in Chrome or IE, will try FF next ...]

     
  • Mike Cowlishaw
    Mike Cowlishaw
    2014-01-21

    FF let me edit the earlier post, but it still has spurious dates in the DIR. Anyway, the list of files is correct -- everything still there, despite the uninstall.

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-21

    Mike, the fact that you can't delete rexx.dll yourself with admin privileges seems to show that some process has rexx.dll opened.

    Not sure how much time you have to invest on this, but Process Explorer from Sysinternals can search for a DLL and list what process has it opened. Maybe that would give you some insight.

     

  • Anonymous
    2014-01-21

    Mark, I'll look into that tomorrow .. but surely that doesn't explain why all the ooRexx files are still in the directory after the uninstall? The .exes were certainly not in use.

    Mike

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-21

    It depends on when you looked at the directory. If you looked when the error with rexx.dll popped up, the installer would have already placed the exes on your system.

    ; Distribution executables...
    ${File} "${BINDIR}\" "ooDialog.com"
    ${File} "${BINDIR}\" "ooDialog.exe"
    ${File} "${BINDIR}\" "rexx.exe"
    ${File} "${BINDIR}\" "rexx.img"
    ${File} "${BINDIR}\" "rexxc.exe"
    ${File} "${BINDIR}\" "rxsubcom.exe"
    ${File} "${BINDIR}\" "rxqueue.exe"
    ${File} "${BINDIR}\" "rxapi.exe"
    ${File} "${BINDIR}\" "rexxhide.exe"
    ${File} "${BINDIR}\" "rexxpaws.exe"
    ; Distribution DLLs...
    ${File} "${BINDIR}\" "rexx.dll"
    ${File} "${BINDIR}\" "rexxapi.dll"
    ${File} "${BINDIR}\" "rexxutil.dll"

    The uninstall portion of the installation program is actually a separate program. When you get to the page that actually is deleting the files, the best place to look at the directory would be when it gets to Completed, but before you push the Next button.

    You could also scroll up a ways in the Details pane and see if it list any problem for rexx.dll. On a install here I have:

    Delete file: C:\Rexx\ooRexx\rexxutil.dll
    Delete file: C:\Rexx\ooRexx\rexxapi.dll
    Delete file: C:\Rexx\ooRexx\rexx.dll
    Delete file: C:\Rexx\ooRexx\rexxpaws.exe
    Delete file: C:\Rexx\ooRexx\rexxhide.exe

    Of course, that would explain everything except, from your listing:

    20/01/2014 03:31 192,512 rexxutil.dll

    which shouldn't be installed until after rexx.dll

     
  • Mike Cowlishaw
    Mike Cowlishaw
    2014-01-21

    Sounds like processExplorer is the next step. I already had that, and have downloaded the latest. Cannot see how that will tell me what is using a DLL, however; and the help .. doesn't. A quick hint would be appreciated.

    Mike

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-21

    Hi Mike,

    I just launched procexp from the command line. In the menu at the top is a Find. Click on that and type in rexx.dll.

    If I don't have a rexx.exe process, the find returns nothing. If I start a Rexx program that doesn't quit (I just put a pull statement if a test script,) then Find shows rexx.exe.

    So, my assumption, (and some Google search,) is that it will work for you if their is some process with rexx.dll open.

    Maybe not of course. Maybe the OS isn't unloading rexx.dll for some other obscure reason. Maybe the loaded reference count is screwed up for some reason.

     

  • Anonymous
    2014-01-22

    ProcExp did indeed identify the problem -- one of my web servers was still running; the program to close them had a bug and only closed 2 of the 3 :-(.

    This time I used 'delete all files in tree' in the uninstall while leaving the server running; the files that got left in the ooRexx folder were:

    20/01/2014 03:31 120,320 orexxole.dll
    20/01/2014 03:31 861,696 rexx.dll
    20/01/2014 03:25 126,464 rexxapi.dll
    20/01/2014 03:31 192,512 rexxutil.dll
    21/01/2014 17:12 78,449 uninstall.exe

    Surely the uninstall process should have reported that it was unable to delete rexx.dll, etc.?

    Minor separate observation: during the install I got a popup saying 'unable to start rxapi service because no device attached' (or something like that). A bit worrying, although everything seems to work.

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-22

    • labels: rexx.dll, Installation --> installer
    • summary: Installation fails trying to write rexx.dll --> Windows installer fails to detect that uninstaller failed
    • status: open --> accepted
    • assigned_to: Mark Miesfeld
    • Pending work items: none --> code+test
     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-22

    Mike, there are numerous checks for errors:

    ExecWait '$RegVal_uninstallString /U=$3 _?=$RegVal_uninstallLocation' $0

    IfErrors UninstallErrors
    ${if} $0 == 0
    ; No errors, do a sanity check and finish up.
    IfFileExists "$INSTDIR\${KEYFILE1}" UninstallErrors
    IfFileExists "$INSTDIR\${KEYFILE2}" UninstallErrors

    apparently they don't work.

    I'm going to change the title of the bug and see if I can fix that.

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-24

    • status: accepted --> pending
    • Pending work items: code+test --> complete
    • Group: None --> v4.2.0
     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-24

    Committed revision 9869. [r9869] 4.2.0 branch
    Committed revision 9870. [r9870] trunk

    This change uses some new functionality for NSIS I found that checks for locked files. The installer now checks as soon as it starts if the important files, rexx.exe, rexx.dll, rxapi.exe and some others, are locked. If any of the files are locked, the installer puts up an explanatory message and aborts. Same thing for the uninstaller.

    This should prevent any partial uninstalls, or partial installs.

     

    Related

    Commit: [r9869]
    Commit: [r9870]


  • Anonymous
    2014-01-24

    Experimental build shows a dialogue which indicates rexx.dll is locked; many thanks!

    Would it be possible to add a Retry button? Reason: if the installer is started from a browser or from some environment that uses Rexx (about to be manually closed) the installation is aborted after this dialog, and after resolving the problem it can be really hard to locate the installer .exe to restart it. A retry option would be nice.

     
  • Mike Cowlishaw
    Mike Cowlishaw
    2014-01-26

    Hmm, I found (in win7-i386/) ooRexx420_0-x86_32.exe 2014-01-26 01:03 5.0M which is from this morning, but no sign of the Retry button. Also looked in the directory 9878/ but that only had Linux builds?

     
  • Mark Miesfeld
    Mark Miesfeld
    2014-01-26

    Sorry, I got confused on what I committed when, for what. The commit I listed was for the ooDialog installer. Looking at my source tree I see that the change for the ooRexx installer didn't get committed.

    Committed revision 9879. [r9879] Updates installer with Retry button.

     

    Related

    Commit: [r9879]

  • Mike Cowlishaw
    Mike Cowlishaw
    2014-01-26

    Just tested private link .. now works beautifully. Nice work!! And many thanks; that will surely help many people.

     
1 2 > >> (Page 1 of 2)


Anonymous


Cancel   Add attachments