viewpoint-particle

Author Topic: 1028: Logdisk: Requested drive not on line  (Read 6650 times)

George Vagenas

  • Full Member
  • ***
  • Posts: 102
1028: Logdisk: Requested drive not on line
« on: June 23, 2013, 04:29:58 pm »
Apart from closing any Explorer windows accessing the drive is there any way to recover from this error?
Thanks

George

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #1 on: June 24, 2013, 07:55:44 am »
You could try adding a DirChange just before the offending function, to ensure your script isn't logged into that directory. If that doesn't help resolve the issue please post a code snippet of the code you are having a problem with. DebugTrace output might also be useful.
Deana F.
Technical Support
Wilson WindowWare Inc.

George Vagenas

  • Full Member
  • ***
  • Posts: 102
Re: 1028: Logdisk: Requested drive not on line
« Reply #2 on: June 25, 2013, 03:23:26 am »
This is a snippet of the code that caused the error, but I had run it several times the other day without incident.  And I just ran i t several times now, again without any problem.  I did modify the code to see if a DirChange when logged into the directory caused any problems but it doesn't. 

Code: Winbatch
Root = wingetactive()
if strindexnc(Root, 'powerdesk', 0, @fwdscan)==1
   Ndx = strindex(Root, '>', 0, @fwdscan)
   Root = strsub(Root, Ndx+2, -1)
   Ndx = strindex(Root, '\', 0, @backscan)
   Root = strsub(Root, 1, Ndx)
else
   ; Directory Opus's title is the current folder.
   Root = strcat(wingetactive(), '\')
endif
boxopen('Cover folder', 'Creating/updating Cover folder for ':Root)
dirchange(Root)
; Just a test normally causes no problems.
dirchange(Root)  
Folders = diritemize('*.*')
; Script proceeds to process folders.
display(3, 'No Problem', Root)
:cancel
return

 
As I said I was looking for a way to recover from the error.  If its not possible then perhaps it should be assigned a severe error level.
Thanks

George

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #3 on: June 25, 2013, 08:11:12 am »
Sorry I didn't realize you were asking about error handling. In that case we have a nice tutorial that should help: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+Tutorials+Trap~Errors.txt

The easiest option is to use ErrorMode around the offending function to capture this specific error:
Deana F.
Technical Support
Wilson WindowWare Inc.

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #4 on: June 25, 2013, 08:14:20 am »
I see you are using WinGetActive then passing the results to a DirChange function. Yet I do not see any code to confirm that you have a valid directory. I recommend adding code to confirm you have a valid directory name before passing it to any function that accepts a directory path. See DirExist.
Deana F.
Technical Support
Wilson WindowWare Inc.

George Vagenas

  • Full Member
  • ***
  • Posts: 102
Re: 1028: Logdisk: Requested drive not on line
« Reply #5 on: June 25, 2013, 04:53:54 pm »
These lines process WingetActive to return valid folders. Normally I use Directory Opus and its window title is always the logged folder.
Code: Winbatch
      if strindexnc(Root, 'powerdesk', 0, @fwdscan)==1
         Ndx = strindex(Root, '>', 0, @fwdscan)
         Root = strsub(Root, Ndx+2, -1)
         Ndx = strindex(Root, '\', 0, @backscan)
         Root = strsub(Root, 1, Ndx)
      else
         Root = strcat(wingetactive(), '\')
      endif
 

As for error handling this is my error handling template.
Code: Winbatch
   intcontrol(73, 2, 0, 0, 0)   ; GOSUB error handler.

:WBERRORHANDLER
   Error = LastError()
   
;    if Error==####
;       ; Deal with it.
;       intcontrol(73, 2, 0, 0, 0)   ; GOSUB error handler.
;       return
;    endif
   
   ErrInfo = strcat('Error: #', Error, ': ', wberrortextstring, @crlf, 'Script: ', wberrorhandlerline, @crlf, 'Assignment: ', wberrorhandlerassignment, @crlf, 'File: ', wberrorhandlerfile, @crlf, 'Procedure: ', wberrorinsegment, @crlf, 'Line No. ', wberrorhandlerlinenumber, @crlf)
   clipput(ErrInfo)
   pause('Error Message on Clipboard', ErrInfo)

   exit
 

And what I'm looking for is the code that I could insert here:
Code: Winbatch
   if Error==1028
      ; Deal with it.
      ...
      intcontrol(73, 2, 0, 0, 0)   ; GOSUB error handler.
      return
   endif
   
 
to recover from the error.
Thanks

George

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #6 on: June 26, 2013, 07:40:25 am »
As for using WinGetActive, This function merely obtains the current active Window Title. Consider an instance where the expected application is not running or not active. I recommend avoiding such an issue by checking if the directory in fact exists. See DirExist.

I see you already have error handling built into the script. All you will need to do is add the code to the :WBERRORHANDLER to handle this specific error number. I see you are already calling LastError() in the WBERRORHANDLER. This function call will return 1028. I see you have also already added code to capture that specific error. Since you want to simply ignore the error you should re-arm the error handle and return ( just as you have. )

What is it you would like to do? Add additional code to re attempt the command? If so then add this code inside this if condition.
Deana F.
Technical Support
Wilson WindowWare Inc.

George Vagenas

  • Full Member
  • ***
  • Posts: 102
Re: 1028: Logdisk: Requested drive not on line
« Reply #7 on: June 26, 2013, 01:51:11 pm »
"As for using WinGetActive, This function merely obtains the current active Window Title. Consider an instance where the expected application is not running or not active. I recommend avoiding such an issue by checking if the directory in fact exists. See DirExist."

I'm sorry I thought  it was clear that I am launching the code with either Directory Opus or Power Desk as the active window (from Popmeunu with a hot-key actually).  Hence the initial code to get the current (root) folder using WinGetActive.

"I see you already have error handling built into the script."  No I don't, I posted my Error template in response to your suggestion that I use Error mode.

"What is it you would like to do? Add additional code to re attempt the command? If so then add this code inside this if condition." 

Again I thought this was clear, but what code should I add to recover from this error?  As I said in my original post:
"Apart from closing any Explorer windows accessing the drive is there any way to recover from this error?"
Thanks

George

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #8 on: June 26, 2013, 02:21:12 pm »
Lots of miscommunication going on in this thread....

Maybe a Full code sample will help:

Code: Winbatch
Root = WinGetActive()
if strindexnc(Root, 'powerdesk', 0, @fwdscan)==1
   Ndx = strindex(Root, '>', 0, @fwdscan)
   Root = strsub(Root, Ndx+2, -1)
   Ndx = strindex(Root, '\', 0, @backscan)
   Root = strsub(Root, 1, Ndx)
else
   ; Directory Opus's title is the current folder.
   Root = strcat(Root, '\')
endif

If !DirExist( Root )
    Pause('Notice', 'Current active window did seem to be a valid directory:':@lf:Root)
    Exit
Endif

BoxOpen('Cover folder', 'Creating/updating Cover folder for ':Root)

DirChange(Root)
 
Folders = DirItemize(Root:'*.*')
; Script proceeds to process folders.
Display(3, 'No Problem', Root)

Exit

:WBERRORHANDLER
Error = LastError()
   
If Error == 1028 ; Handle LogDisk Error
   Root = WinGetActive()
   DirChange('C:\')
   IntControl (73, 2, 0, 0, 0)   ; Re-Arm error handler.
   Return
Endif

ErrInfo = strcat('Error: #', Error, ': ', wberrortextstring, @crlf, 'Script: ', wberrorhandlerline, @crlf, 'Assignment: ', wberrorhandlerassignment, @crlf, 'File: ', wberrorhandlerfile, @crlf, 'Procedure: ', wberrorinsegment, @crlf, 'Line No. ', wberrorhandlerlinenumber, @crlf)
Pause('Error Message on Clipboard', ErrInfo)
Exit

I hope this helps.
Deana F.
Technical Support
Wilson WindowWare Inc.

George Vagenas

  • Full Member
  • ***
  • Posts: 102
Re: 1028: Logdisk: Requested drive not on line
« Reply #9 on: June 27, 2013, 01:58:51 am »
Thanks for the input but given that this error is intermittent I decided that I can live with the occasional restart of Opus or PowerDesk.  Also I was able to test the script to make sure the error routine works as expected. 
Code: Winbatch
:WBERRORHANDLER
   Error = LastError()
   
   if Error==1028
      ; Deal with it.
      winclose(wingetactive())
      gosub CreateCoverFolder
     
      if Powerdesk      ; True if PowerDesk was the active window.
         run("C:\Program Files\Avanquest\PowerDesk\PDExplo.exe", '"':Root:'"')
      else
         run("C:\Program Files\GPSoftware\Directory Opus\dopus.exe", '"':Root:'"')
      endif  
      exit
   endif
   
   ErrInfo = strcat('Error: #', Error, ': ', wberrortextstring, @crlf, 'Script: ', wberrorhandlerline, @crlf, 'Assignment: ', wberrorhandlerassignment, @crlf, 'File: ', wberrorhandlerfile, @crlf, 'Procedure: ', wberrorinsegment, @crlf, 'Line No. ', wberrorhandlerlinenumber, @crlf)
   clipput(ErrInfo)
   pause('Error Message on Clipboard', ErrInfo)

   exit
 
Thanks

George

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: 1028: Logdisk: Requested drive not on line
« Reply #10 on: June 27, 2013, 07:58:39 am »
Happy to hear you found a solution that fits your needs.
Deana F.
Technical Support
Wilson WindowWare Inc.