LB Booster
« Access denied error »

Welcome Guest. Please Login or Register.
Apr 1st, 2018, 04:25am



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
We apologize Conforums does not have any export functions to migrate data.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

Thank you Conforums members.
Speed up Liberty BASIC programs by up to ten times!
Compile Liberty BASIC programs to compact, standalone executables!
Overcome many of Liberty BASIC's bugs and limitations!
LB Booster Resources
LB Booster documentation
LB Booster Home Page
LB Booster technical Wiki
Just BASIC forum
BBC BASIC Home Page
Liberty BASIC forum (the original)

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: Access denied error  (Read 761 times)
RobM
Junior Member
ImageImage


member is offline

Avatar




PM


Posts: 91
xx Re: Access denied error
« Reply #2 on: Jun 14th, 2014, 2:32pm »

I hadn't considered an anti-virus program might be the problem. A file is being downloaded from the internet so that would make sense.

The delay was put there to let the user see what is happening. Without it the process runs too fast. Using 'sleep' causes the progress bar to stop, which I guess isn't too bad.

This code should run, downloading the file and checking the version.
Code:
    ScrnScl=1
    VERDATE$="5/30/2014"
    dr$=GetSpecialfolder$(26)
    result=MKDIR(dr$;"\Cabinet Planner")
[CheckUpdate]
    EndTime=time$("seconds")+3
    WindowWidth = int(255*ScrnScl)
    WindowHeight = int(100*ScrnScl)
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)
    BackgroundColor$ = "white"

    statictext #splash.st1,"Checking internet connection....",20,int(15/ScrnScl),170,int(20/ScrnScl)

    open "Cabinet Planner update" for dialog_modal as #splash
    #splash,"trapclose [quit.Splash]"

    call createProgressBar hWnd(#splash), 20,int(40/ScrnScl),200,int(20/ScrnScl)
    'check for internet connection
    lpszURL$ = "http://www.cabinetplanner.com"
    FLAG.ICC.FORCE.CONNECTION=1
    open "wininet.dll" for dll as #win
    calldll #win, "InternetCheckConnectionA",_
      lpszURL$ As ptr, _
      FLAG.ICC.FORCE.CONNECTION As Long,_
      dwReserved As Long, _
      result As ulong
    close #win

    while time$("seconds")< EndTime:wend

    if result=1 then print #splash.st1,"Checking version...."

    'download file
    urlfile$="http://cabinetplanner.com/files/update.txt"
    localfile$=dr$+"\update.txt"
    dim info$(10, 10)
    if result=1 then
      open "URLmon" for dll as #url
      calldll #url, "URLDownloadToFileA",_
      0 as long,_ 'null
      urlfile$ as ptr,_ 'url to download
      localfile$ as ptr,_ 'save file name
      0 as long,_ 'reserved, must be 0
      0 as long,_ 'callback address, can be 0
      DownloadToFile as ulong '0=success
      close #url
    end if

    if fileExists(dr$, dr$+"\update.txt") then
      open dr$+"\update.txt" for input as #updatefile
      line input #updatefile, verdat$
      line input #updatefile, descrip$ 
      close #updatefile

      'while time$("seconds")< EndTime+6:wend
      calldll #kernel32, "Sleep", 3000 as long, r as long

      kill dr$+"\update.txt"

      RunningVersion=date$(VERDATE$)

      UpdateVersion=date$(verdat$)

      if RunningVersion>UpdateVersion then HaveLatestVersion=1

      if RunningVersion=UpdateVersion then HaveLatestVersion=1

      if RunningVersion<UpdateVersion then HaveLatestVersion=0

      if HaveLatestVersion=1 then [HaveLatestVersion]

      if HaveLatestVersion=0 then [NotLatestVersion]

    end if

    close #splash

    notice "Unable to download the update, please try again later"

    wait

[NotLatestVersion]
    proloc=833
    prolc$=word$(prolc$,2);" ";word$(prolc$,3);" ";word$(prolc$,4);" ";word$(prolc$,5);" ";word$(prolc$,6);" ";word$(prolc$,7);" ";word$(prolc$,8);" ";word$(prolc$,9);" ";word$(prolc$,10);" ";str$(proloc)
    close #splash
    WindowWidth=int(315*ScrnScl)
    WindowHeight=int(100*ScrnScl)
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)
    BackgroundColor$ = "white"
    statictext #update, "There is a newer version available, install now?", 5, int(10/ScrnScl), 260, int(22/ScrnScl)
    button #update.clos, "Close program and install", [InstallUpdate], UL, 5, int(35/ScrnScl),160,int(22/ScrnScl)
    button #update.can, "Cancel", [CloseUpdate2], UL, 170, int(35/ScrnScl), 60,int(22/ScrnScl)
    button #update.inf, "Info", [UpdateInfo], UL, 235, int(35/ScrnScl), 60,int(22/ScrnScl)
    open "Update" for dialog_modal as #update
    #update, "trapclose [CloseUpdate2]"
    wait
[CloseUpdate2]
    close #update
    if checkupdate=1 then checkupdate=0:return
    wait
[UpdateInfo]
    WindowWidth=int(355*ScrnScl)
    WindowHeight=int(125/ScrnScl)
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)
    BackgroundColor$ = "white"
    statictext #info.txt, "", 5, int(10/ScrnScl), 340, int(110/ScrnScl)
    open "Update" for dialog_modal as #info
    #info, "trapclose [Closeinfo]"
    #info.txt, descrip$ 
    wait
[Closeinfo]
    close #info
    wait
[InstallUpdate]
    close #update
    close #cp
    run DefaultDir$+"\Updater.exe"
    end
[HaveLatestVersion]
    close #splash
    WindowWidth=int(255*ScrnScl)
    WindowHeight=int(100*ScrnScl)
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)
    BackgroundColor$ = "white"
    statictext #updateh, "You have the latest version", 9, int(10/ScrnScl), 200, int(22/ScrnScl)
    button #updateh.default, "OK", [CloseUpdate], UL, 95, int(35/ScrnScl), 60,int(22/ScrnScl)
    open "Update" for dialog_modal as #updateh
    #updateh, "trapclose [CloseUpdate]"
    wait
[CloseUpdate]
    close #updateh
    if checkupdate=1 then checkupdate=0:return
    wait

sub createProgressBar hWnd, xpos, ypos, wide, high
    CallDLL #user32, "GetWindowLongA", hWnd as uLong, _GWL_HINSTANCE as Long, hInst as uLong
    PBM.SETMARQUEE =_WM_USER+10 : style = _WS_CHILD or _WS_VISIBLE or PBM.SETMARQUEE
    class$="msctls_progress32" : title$=""
    calldll #user32, "CreateWindowExA", 0 as long, class$ as ptr, title$ as ptr, style as long, xpos as long, ypos as long, wide as long, high as long, hWnd as ulong, 0 as long, hInst as ulong, 0 as long, createProgressBar as ulong
    calldll #user32, "SendMessageA", createProgressBar as ulong, PBM.SETMARQUEE as long, 1 as long, 100 as long, r as long
end sub

function fileExists(path$, filename$)
  files path$, filename$, info$()
  fileExists = val(info$(0, 0))  'non zero is true
end function

Function GetSpecialfolder$(CSIDL)

    struct IDL, _
    cb As uLong, _
    abID As short

    calldll #shell32, "SHGetSpecialFolderLocation",_
      0 as ulong, _
      CSIDL as ulong, _
      IDL as struct,_
      ret as ulong

    if ret=0 then
      Path$ = Space$(_MAX_PATH)
      id = IDL.cb.struct

      calldll #shell32, "SHGetPathFromIDListA",_
      id as ulong, _
      Path$ as ptr, _
      ret as ulong

      GetSpecialfolder$ = trim$(Path$)

      open "ole32.dll" for dll as #ole32

      calldll #ole32, "CoTaskMemFree",_
      id as ulong,_
      result as void

      close #ole32
    end if

    if GetSpecialfolder$ = "" then GetSpecialfolder$ = "Not Applicable"
End Function
 
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 1348
xx Re: Access denied error
« Reply #3 on: Jun 14th, 2014, 4:24pm »

on Jun 14th, 2014, 2:32pm, RobM wrote:
IUsing 'sleep' causes the progress bar to stop, which I guess isn't too bad.

For delays in excess of a few tens of milliseconds you can put a short Sleep in a FOR..NEXT loop. That way the program won't become unresponsive. For example:

Code:
    ' approximately one second delay:
    for n = 1 to 100
      calldll #kernel32, "Sleep", 10 as long, r as long
    next n 

Richard.
User IP Logged

RobM
Junior Member
ImageImage


member is offline

Avatar




PM


Posts: 91
xx Re: Access denied error
« Reply #4 on: Jun 14th, 2014, 5:23pm »

I think I'll try not deleting the file afterward but check for its existence and delete it before downloading the new file. That way if this is because of an AV program having the file open for scanning, it can do its thing without interfering with my program.
User IP Logged

RobM
Junior Member
ImageImage


member is offline

Avatar




PM


Posts: 91
xx Re: Access denied error
« Reply #5 on: Jul 1st, 2014, 8:42pm »

Quick follow up. After making the changes I mentioned above the error seems to have gone away wink
User IP Logged

Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »

| |

This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls