# VBForums CodeBank > CodeBank - Visual Basic 6 and earlier >  LiveUpdate. Downloads from web and updates multiple client files.

## Wokawidget

Ok, finally I have produced some code that I can post here.

This software allows developers to add "Live Update" features to their applications.

*Features:*
Multi app/file auto update at the same timeAuto update silently in backgroundUse wizard to control live updateRetrieves remote file info before downloadingAbility to add new, previously uninstalled, software components to server for downloadMake updates mandatoryAllow users to select which updates they would like to downloadProgress status of downloadsNotification of download problems.Ability to see which updates failed/passed download.Cancel update downloadAuthenticate username and password

One thing you need to do is to go to this web site:

http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip

and download the 2 tlb files and install them using the instructions provided.

These tlb files are used for the call back to allow the download to be shown in a progress bar, and to allow the user to cancel the download.

In the example attached the app is looking at NoteMe's server...cheers to NoteMe for letting him use his server  :wave: 

Here's what to do.

If you want to use your own files, on your own server, and not use NoteMes test server then do the following:

Copy the files you want to download to your web server. If you have IIS on your PC you can create a virtual directory and then use:

*http://LocalHost/MyVirtualDir/*

as the remote path.

Then you need to copy a file called Update.txt to the same location as your files.
The update.txt file contains info about the updates on your server.
In the example I have posted the update.txt looks like:

*MDACS;MDAC Setup v2.6;2.6.3;MDAC_Setup.exe;False;False
RESUME;Wokas Resume;4.1;ResumeTEST.doc;False;True
OFFICE;MS Office Components;3.1.0056;Office.exe;True;False
ACC;Accounting Software;1.0.5;AccSetup.exe;False;True
TICKICON;Tick Icon;3;TickIcon.gif;false;False*

Each column is split in VB using the ;

The columns are: Key, App Desc, Version, Filename, Mandatory, New App

So, if we take the 1st line of that file:

MDACS - This is the application/file key of the components
MDAC Setup v2.6 - This is a short desc about the remote components
2.6.3 - This is the version number of the remote file
MDAC_Setup.exe - This is the remote file to download
False - This means the download is NOT mandatory
False - This means that a previous version of this app must be installed to download this update.

When my app starts in frmUpdate I load the cuurent installed apps into the auto updator:


```
    With mobjUpdate.Products
        .Clear
        .Add "MDACS", "MDAC Version v2.5", "2.5.1"
        .Add "RESUME", "Wokawidgets Resume", "2.5"
        .Add "IMAGE", "Splash Screen Image", "18"
        .Add "OFFICE", "MS Office Components", "3.1.0054"
        .Add "TICKICON", "Tick Icon", "5"
    End With
```

These values can be in a txt file on the local machine, in the reg or whereever you like. I've just added them in directly.



```
mobjUpdate.RetrieveUpdates
```

This downloads the update file from the server, and populates the update properties.
You can then select what updates you require.

In my example I have an live update wizard AND the quick auto update...however you can do ALL the updating with an interactive UI:


```
   mobjUpdate.RemotePath = "http://www.noteme.com/Wokawidget/"
   With mobjUpdate.Products        .Clear
        .Add "MDACS", "MDAC Version v2.5", "2.5.1"
        .Add "RESUME", "Wokawidgets Resume", "2.5"
        .Add "IMAGE", "Splash Screen Image", "18"
        .Add "OFFICE", "MS Office Components", "3.1.0054"
        .Add "TICKICON", "Tick Icon", "5"
    End With
    mobjUpdate.DownloadUpdates
```

And then just trap the UpdatesDownload event:


```
Private SUb mobjUpdate_UpdatesDownload()
   MsgBox "Updates Downloaded!"
End Sub
```

After this the InstallProductUpdates is fired:


```
Private Sub mobjLiveUpdate_InstallProductUpdates(ByVal Product As vbLiveUpdate.Product, Installed As Boolean)

End Sub
```

This is where you add code to copy files to a specific location, or launch setup applications etc. If the update passes then set Installed = True.

That's pretty much all the code is needed to download multi updates.
I have added a lot of fancy UI code into my app just to demo what can be done with the code.

If click Web Download then this just demos the vbDownload project, which can be used completely on it's own in other projects to download any files from the internet.

Any comments most welcome.

*New version in Post #37!!!*

Woka

PS Thanks to Klienma who stuck with me and put up with my annoying questions on how to get the URLDownload API to work with a progress bar. Cheers, this code would not be possible without your help  :wave:

----------


## mike2

Very nice :Thumb:  

I have a question:
If I want to send my program to someone, will I have to send him the tlb files too?

----------


## Wokawidget

err...yea.
The app above requires the following to be registered on the PC.

olelib.tlb
olelib2.tlb

This are installed by office though, so if the PC has office I believe this arn't needed.

Then you need to register

vbDownload.dll

and

vbLiveUpdate.dll

I am currently rewritting vbDownload.dll as I found a slightly better method that runs asynchronously. Hopefully I will get this done tonight, but not promising anything.

I take it the code worked on your PC?

Did you email me today?

Woka

----------


## mike2

Yeah, worked fine on my PC  :Smilie: 
Well actually, I dont need the live update feature, I might need in the future the WebDownload one.
I have seen you post this somewhere else...
I see that this version requiers the download.dll file...
If I need the WebDownload, I'll search the forums and I'll find it  :Alien Frog:  
I'll currently use the URLDownloadToFile api...
If I have time, and I'm not bored, I might update to yours... :big yellow:

----------


## Wokawidget

I use the URLDownload API function too.
I use the tlb files for a call back so that I can control a progress bar with it.

I am not happy with this function though as it's not asynchronous  :Frown: 

The web download is the vbDownload.dll
If you don't want to use the dll just add the download class directly into your app.

Woka

----------


## tbyrne

I want to do a little more with the liveupdate.  On my web site I sell subscriptions to updated drug formularies.  Users subscribe at different rates to get access to more or less informaton.  My .asp download pages on the web are protected by an MS-Access password file.  Code on each page checks that users are registered and allows access based on subscription level.  Is there a way to have the update script in my program check the password file on my web site before allowing the download process to proceed? Examples?

Thanks
tbyrne

----------


## DarkX_Greece

I like your sample! Helped me!

----------


## Wokawidget

> I want to do a little more with the liveupdate.  On my web site I sell subscriptions to updated drug formularies.  Users subscribe at different rates to get access to more or less informaton.  My .asp download pages on the web are protected by an MS-Access password file.  Code on each page checks that users are registered and allows access based on subscription level.  Is there a way to have the update script in my program check the password file on my web site before allowing the download process to proceed? Examples?
> 
> Thanks
> tbyrne


You could use the inet control, or winsock, to open an asp page which will then validate the password and username, you write the response to the page. Then when u receive the page, you check to see if the login was successfull.
I will try and dig out some code.

Woka

----------


## Wokawidget

> I like your sample! Helped me!


Cheers  :Smilie: 

WOka

----------


## tbyrne

Thanks Woka
All the code/examples you can find is greatly ppreciated.

Tbyrne

----------


## aijii

I have a question - 

Lets say my application, called aijii.exe were to invoke a liveupdate, and one of the files to be updated was aijii.exe... how would I actually successfully copy this over itself whilst the program was still running ? 

Is there another way to do this ?

----------


## Wokawidget

This is a good question.
It's the same if you download an update for vbLiveUpdate.dll  :Big Grin: 

You must use an installer like Inno Setup to install your app.
This creates an install package like most apps you download from the web have.
If the Setup package can't replace a file at runtime, because it's being used, then it tries to restart your system...like some setups do.
When the system restarts the old files are over written with the new.

There is a link to the Inno homepage in my sig.

Woka

----------


## aijii

Our app is currently using installshield, I assume the same applies.....

So I guess we just have liveupdate or webdownload download the patch file and execute it from the application... OR we could just have a run.exe file that the user executes, this first checks for updates, then executes our main application...... 

hmmm..

----------


## Wokawidget

Hahaha...Which method you gonna pick?

Yea, install shield will do it for ya.

I'd go for run.exe then you can add:

VB Code:
If App.PrevInstance Then
   MsgBox "LiveUpdate is currently running."
Else
   'code to do liveupdate stuff
   frmMain.SHow
   'etc
End If
Woka

----------


## aijii

Not sure yet - I haven't quite played too much with your code yet... I still have a few question marks.....

The business rules here are that the user MUST upgrade, but having it reboot their system isn't really preferable as the software will be running on point of sales systems... I'm thinking the run.exe solution is the easiest....

just a quick question - how hard will it be to have the auto live update use the progress bar like in web download ? or have the webdownload check to see if updates are required ?

----------


## Wokawidget

Errrr...When live updates runs in the back ground I just haven't given it a user interface. Sure it's 100% possible...just add a progress bar nad trap the evens of the liveupdate object... :Confused: 

Errr...it already does check to see what updates are required... :Confused: 

Woka

----------


## aijii

Err .. sorry i worked this out myself anyway .. should have just deleted the post.. sorry i tend to get a bit lazy and post questions up before i can be bothered trying it out.

Anyway, works very well, cheers!

Just a question, in 'installproductupdates', how do I know what the actual filename of the file that corresponds to that update is ? 

EDIT: rephrase-  how does the application know what the filename is ... short of hardcoding it i mean..., also how does it handle authentication ?

----------


## BrailleSchool

> err...yea.
> The app above requires the following to be registered on the PC.
> 
> olelib.tlb
> olelib2.tlb
> 
> This are installed by office though, so if the PC has office I believe this arn't needed.
> 
> Then you need to register
> ...


How are you able to register the .DLL files when they arent even present in the download?

----------


## Wokawidget

Errr...the VB projects do exist. U need to compile the projects into DLLs.

Woka

----------


## BrailleSchool

> Errr...the VB projects do exist. U need to compile the projects into DLLs.
> 
> Woka


Ok.  I compiled the group project and found a few problems that you might not be aware of.

When you click on Live Update button, and use the Wizard.
When you get the msgbox saying "Remote Information Not Found." you then get a run-time error '91': Object variable or With block variable not set. and then you get run-time error '440': Automation error.

The run-time error '91' highlights:

VB Code:
Private Sub UpdateInstallStatus()
    txtStatus.Text = lvwResults.SelectedItem.Tag
End Sub
in frmWizard.frm

----------


## bat711

I had/have the same problem...

----------


## Wokawidget

Soooooooo sorry for the late reply  :Frown: 
Been working really hard and have neglected my projects...Boooo bad Woka *SLAP*


VB Code:
Private Sub UpdateInstallStatus()
    If Not (lvwResults.SelectedItem Is Nothing) Then
         txtStatus.Text = lvwResults.SelectedItem.Tag
    End If
End Sub
That should do the trick  :Big Grin: 

Woka

----------


## bat711

Looks like it's working well...

 :Thumb:

----------


## Inuyasha1782

Not to sound newbish or anything, but do you think you can explain this a little more. I have been looking for an auto-update for awhile now. As you can see I have finally found one, but I cant quite understand how to use it. What I mean is like some easier instructions on using it. It sounds good from the feedback, really need it   :Ehh:

----------


## DJHotIce

What would be the best way to add this to my application.

----------


## Wokawidget

hi. i am travelling europe at the noment and am in a cafe using a silly french keyboard.
there is no vb oàn this machine either.
I will be bqck in just over a week where I will be able to hlp you oot:

woka

----------


## DJHotIce

Thanks Much Woka! I love the app though!   :Thumb:

----------


## Wokawidget

Sorry for the late replies  :Frown: 

To add this to your app just compile the vbLiveUpdate dll, and then reference this into your app and then use it like I have in my demo app.

You app would then add products and control the functions in the dll.

Is that what you mean?

This project isn't easy. It really isn't for people who don't know VB  :Frown: 

I can't really give huge chats on how it works etc, and how to get it running in everyones apps, as I would be doing this full time.

If you have any questions can you make them I little bit more specific as it's much easier for me to answer them then  :Big Grin: 

Wooof

----------


## adamm83

Hey Woka,

The 2 tlb files you refer to at the beginning, but im a little confused?!  :Confused:  

I downloaded the link you provided (http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip) which contained a whole bunch of *.inc files, olelib.tlb, olelib.odl, a folder named "Implements" with some more *.inc files, olelib2.tlb, olelib2.odl.

Now, I assume the 2 tlb files you were referring to are olelib.tlb and olelib2.tlb, but would I copy these to my system directory and register them there, or copy them to my app directory and reg them there? 

A little help please   :Frown:

----------


## Wokawidget

Copy them to the system directory.
Instructions are on that web site...arn't they?

I think I may have a newer version that doesn't require the tlbs. I'll ses if I can dig it out.

WOka

----------


## adamm83

A newer version of the live update?

----------


## BrailleSchool

> Copy them to the system directory.
> Instructions are on that web site...arn't they?
> 
> I think I may have a newer version that doesn't require the tlbs. I'll ses if I can dig it out.
> 
> WOka


If there is a newer version that doesnt require the TLB files then i would definately be interested in it for my new app.

Also, what I would be looking to do with your code is to update the complete program (exe) can your app do this?  i am sure it can.  Same for .chm files.

----------


## Wokawidget

I'll see if I can post it tonight, but can't promise anything as the computer is out of bounds when the girlfriend is round  :Big Grin: 

The app can update anything. It can simpley download a txt file and copy it into a folder if you want, or it can download  a setup.exe (this is what you would do)
Once you download teh setup.exe, you launch the exe, and at the same time you close down your app and the liveupdate window.

Woka

----------


## BrailleSchool

> I'll see if I can post it tonight, but can't promise anything as the computer is out of bounds when the girlfriend is round


hehehe!  whipped i see! lol!




> The app can update anything. It can simpley download a txt file and copy it into a folder if you want, or it can download  a setup.exe (this is what you would do)
> Once you download teh setup.exe, you launch the exe, and at the same time you close down your app and the liveupdate window.
> 
> Woka


Sounds like a plan.  I hope to get to your level of expertise one day  :Wink:

----------


## adamm83

Hey Woka,

 :wave:  Just wondering if you got around to digging up the files for liveupdate. Don't mean to rush you.

Thanks

----------


## Wokawidget

Sorry. Just got back from Dublin, Ireland. Had mad weekend for my birthday. GF suprised me with tickets.

Anyways, the code is attached below
Woof

----------


## Wokawidget

*New Version*
Uses winsock to download the files instead of the URLDownload API.
This gives you true async download.
The code is exactly the same as b4, apart from the vbDownloader project has been altered to use winsock instead of the API.

Woka

----------


## adamm83

Thanks woka!!!  :Thumb:   and happy (belated) birthday!!

----------


## adamm83

Sorry, one more question. Does this source require the 2 .tlb files? 

edit:
and can the liveupdate download from an FTP server?  :Confused:

----------


## adamm83

Hey Woka,

I've been testing out the liveupdate and I have run into some problems:

1)  Whenever I set the .SaveTo path to a subfolder of a drive, or any folder OTHER THAN the root path of a drive, I get a path not found error.

2) I have made a folder on my server (at {link removed}). This folder contains Updates.txt, with the necessary information in it, as well as 2 exe files that i would like to download in the liveupdate (which are referenced in the Updates.txt file. When I run the liveupdate, it seems to find the Updates.txt file properly, but doesnt seem to download anything, and it finishes with a successful message. No downloads though.

This is the code I changed in the liveupdate demo source you supplied with the zip file:

Form_load event:

VB Code:
Private Sub Form_Load()
    Set mobjLiveUpdate = New LiveUpdate
    mobjLiveUpdate.server = "www.acmdesigns.ca"
    mobjLiveUpdate.RemotePath = "clients/sss_lu/"
    mobjLiveUpdate.SaveTo = "C:\"
End Sub

AddProducts sub routine:

VB Code:
Private Sub AddProducts()
Dim x As Integer
Dim arrProducts() As String
x = 1
     With mobjLiveUpdate.Products
        .Clear
        Do Until GetSetting("TrinityScheduler", "LiveUpdate", x) = ""
            'arrProducts = Nothing
            arrProducts = Split(GetSetting("TrinityScheduler", "LiveUpdate", x), ";")
            .Add arrProducts(0), arrProducts(1), arrProducts(2)
            x = x + 1
        Loop
    End With
    
End Sub


The rest is the same as the demoUI code from the example vb project you made.

Any help would be appreciated! Thanks.

----------


## Wokawidget

I am not sure I follow you.
I can't do much from info of "an error".
Have you stepped through the code line by line to see exactly what it's doing.
As for the 1st error. That's extremely simple to fix. However, if you are unable to fix this, then I am 110% sure that this code is a little difficult for you to implements.

Since you didn't give me the err num, or desc, I am going to assume that the error is because I am not adding "\" to the path.

Woka

----------


## Flattery

I can get your LiveUpdate to work for one program at a time but if there are multiple programs in the list I can only get it to update the one at the top of Updates.txt

I put this in:
LC2DOC;LiveDocs v2.1.0;2.1.0;LC2DOC.exe;False;True    
LC2;LiveClient2 v2.1.0;2.1.0;LC2.exe;False;True    
LU;LiveUpdate v2.1.0;2.1.0;LU.exe;False;True       

and it will always say they are upto date but if I add ; at the end of the lines like:
LC2DOC;LiveDocs v2.1.0;2.1.0;LC2DOC.exe;False;True;    
LC2;LiveClient2 v2.1.0;2.1.0;LC2.exe;False;True;    
LU;LiveUpdate v2.1.0;2.1.0;LU.exe;False;True;  

what ever program I put first in the Updates.txt list is the only one that will check for updates.

Any help? This a bug or am I doing something wrong.  :Eek Boom:   :Confused:

----------


## Wokawidget

Can you post the lines of code where you add your products to the Products object?

Woka

----------


## Flattery

.Add "LC2", "LiveClient2 Version v1.0.0", "1.0.0"
.Add "LC2DOC", "LiveDocs v1.0.0", "1.0.0"
.Add "LU", "LiveUpdater Version v1.0.0", "1.0.0"

If I change the order in Updates.txt it will update what ever file is at the top.

----------


## Flattery

even if I use the default program only changing the domain and then put your example Updates.txt into domain/TestFiles/Updates.txt

It still doesn't work right.  Says everything is upto date...

----------


## Flattery

OK... some reason it was not seeing the newline as vbNewLine.
I just did a little work around by putting ;; at the end of a line and then changing
    strData() = Split(pstrData, vbNewLine, , vbTextCompare)
 to
   strData() = Split(pstrData, ";;", , vbTextCompare)

Thanks for the cool program


P.S. Perhaps it was the text editor I was using.  I was using Pico right on the server (a simple linux text editor).

----------


## Wokawidget

Yes that would explain both errors u explained above, and why adding ; at the end would fix it.
I just used notepad  :Big Grin: 

I really should write this in .NET?

I think you're the 1st person to use it properly. I take it it works then?

Woka

----------


## Flattery

Seems to work.. still putting some finishing touches...
Not sure what it is but I get a type mismatch sometimes... I delete a line in Updates.txt and then it may work... then I put it back in and it can still work.

I will just need to fine tune my Updates.txt file... maybe I should just use notepad... hehe

----------


## Flattery

Ok... few small issues I am having.  It all works fine when ran as a group project but as soon as it gets compiled I have a few issues.
1. The last screen where it says Thank you for using LiveUpdate. The following Wokawidget products... up-to-date. The lvwData and txtStatus widgets are empty but should have the updated files and txtStatus should say "LiveUpdates successfully... this update.

2. It seems that the StartProductInstall and the UpdatesDownloaded events are not being raised either.

Been looking into this for a few hours, but haven't figured it out yet.

----------


## Flattery

Well I got it to work for me but not exactly how it was suppose to. Seems like the Raised Events in the dll's didn't want to get raised to the main exe when compiled so I just changed the .dll to do the installing part for me too.

works...

----------


## tony007

Hi all. I am trying to use the first LiveUpdate.zip file projects and when ever i try compile and run them i get the following erros:


Error1:test and vbDownload project error:



```
compile error:

can not find project or library

ok help
```

points to :
*Private mobjBinding     As IBinding*


-----------
Error2:vbLiveUpdate project error



```
compile error:

can not find project or library

ok help
```

points to :
*WithEvents mobjDownload     As Download*

-----------------------------------
Error2 :Big Grin: emo UI project error



```
compile error:

can not find project or library

ok help
```

points to 


```
Private WithEvents mobjDownload As Download
```

I be happy if any of u guys show me how to fix these errors and be abel to test the program.Thanks

----------


## Wokawidget

Sry for my late reply. Been really snowed under with work.

You need to compile the seperate projects 1st. Then reference the dll from the client app instead of the vb project. 

Woka

----------


## Wokawidget

Also, there is a better version at post 37, that doesn't use 3rd party components.
The new version in post 37 uses winsock, and is much more "friendly" imo.

So, if you download the zip from post 37.

Then compile vbWinsock project.
Open vbDownload project and ref vbWinsock.dll instead of the vbp and then compile
Open vbLiveUpdate project, reference vbDownloade.dll. Compile.
Open client app. Ref vbLiveUpdate.dll. compile.
Run.

Woka

----------


## tony007

> Sry for my late reply. Been really snowed under with work.
> 
> You need to compile the seperate projects 1st. Then reference the dll from the client app instead of the vb project. 
> 
> Woka


Many thanks for u reply. could be more specific which one should i compile first. i tried all of them one by one and i got those errors!!

pic of the files in zip file
. 

could u tell me which one u mean by client app so that i need to refrence the dll from ? do i need change what line to make it refrence to dll?Thanks

----------


## Wokawidget

That is not the zip from post 37.

Download from Post 37, then f9ollow instructions above.
Post 37 uses a project called vbWinsock.

WOka

----------


## tony007

> That is not the zip from post 37.
> 
> Download from Post 37, then f9ollow instructions above.
> Post 37 uses a project called vbWinsock.
> 
> WOka


Thanks now i downloaded the right one . Could u tell me how i can ref vbWinsock.dll instead of the vbp ? where should i look for it?Thanks

----------


## Wokawidget

Go to the menu:

Project--->References

Then look for the dll in the list.

Woka

----------


## tony007

> Go to the menu:
> 
> Project--->References
> 
> Then look for the dll in the list.
> 
> Woka


Thank u for u reply. i tryed as pic bleow and browsed for the compile dll but when i try to compile or run it i keep getting this widow again and again !! and says compile error and can not find the project or library and points to 



```
Private WithEvents mobjSocket   As Socket
```

I even placed vbWinsck.dll inside the same folder as vbDownloader folder but no luck!!

----------


## Wokawidget

untick the vbWionsock.Vbp click ok
Go back to references and look for either vbWinsock or Wokawidgets - vbWinsock.
Can't remember what name it will be under.

If ytou have actually compiled vbWinsock project then this will be in the list.
If for what ever reason you cannot find it, then browse to the dll, and NOT the vbp.

Woka

----------


## tony007

i manged to create vbLiveUpdate.dll where should i place it and furthermore which one u refere to as client app when u say :




> Open client app. Ref vbLiveUpdate.dll. compile


which one of the files in the pic i need to refrence it to vbLiveUpdate.dll?Thanks

----------


## Wokawidget

the demoUI project is in the vbLiveUpdate folder.
But u should write your own UI for this.
The dlls acan be placed anywhere on the PC...as long as they are registered with the registry. This is doen automatically when u compile, or u can use RegSvr32 "path to dll" to manually register dlls.

I would suggest you find some resources onj the web about using dlls in apps, as you seem to be a little bit new to it, and this project si certainly quite complicated.

woka

----------


## dsfugabanjr

Hi All,

This LiveUpdate application by Wokawidget, can I use it for a local network using shared folders? Say for example, I have a file name InfoReportXP.exe and is located in \\PC1\INFOREPORTXP, how can I take advantage of this LiveUpdate program without connecting to the internet since the file is located in a Local Area Network? Does this program allows checking the date of modification instead of checking the version of a file?

Please advise...

Thanks,
Doms

----------


## Wokawidget

i am not sure. give \\PC1\ a try instead of the IP address.
I was thinking of modified date, but then I decided against this. U can code that in yourself, it's entirely up to you, but the code currently works off a version number.

Woka

----------


## adamm83

ok hey woka,

I put the LiveUpdate aside for a little while and now I'm back on it.
I seem to be having the same problem as Flattery where it's not detecting the new line in the text file.

I am testing with your demoUI, the updates it comes with and the Updates.txt file supplied as well. When it downloads the Updates.txt to the C:\ drive and processes the data, it does not detect the line break properly in the SetUpdate function, so it cannot split the updates properly. I will try adding ;; at the end of each line like flattery did and use the following code in the function:


VB Code:
strData() = Split(pstrData, ";;", , vbTextCompare)

*EDIT 1:*
Ok that works, i put it all on 1 line and separated each update by a double semi-colon ( ;; ). The txt file doesn't look as tidy as originally, but it works!

*EDIT 2:*
Is there any way to show what version it's downloading/updating to, rather than just saying that it updated the product? So lets say the user has version 1 on their computer, and they check for the updates, and there is a version 2 available. Before the user clicks next to download the update, it would list the product being updated _and the version that it's updating to_. Is that possible?

Also, is there any way to run the live update silently, so like quickly check if an update is available everytime the user starts the program, and if there is an available update, it would run the LiveUpdater GUI then.

*EDIT 3:*
one more question. How do I add updates to install to *mobjLiveUpdate_StartProductInstall*? Would I do something like this?:


VB Code:
Private Sub mobjLiveUpdate_StartProductInstall(Product As vbLiveUpdate.Product, Success As Boolean)
    Dim iExit As Long
     Launch(mobjLiveUpdate.SaveTo & Product.Update.FileName)
    Success = True
End Sub
Is that correct?

*EDIT 4:*
arrggg... ok I'm getting an annoying problem. When I open the VB group of projects that came with the zip file and run the demoUI, the liveUpdate works PERFECTLY.... BUT When I compile the DLLs and run the demoUI separately using the compiled DLLs as references, the liveUpdate works fine until the end. It finds the updates, downloads the updates, but when it gets to the last page where it shows which updates were downloaded, it doesn't show anything in the list. No errors. Why does it work fine when I run it in the vb group, but it doesn't work when I use the compiled DLLs as a reference.

The only changes I made were to the vbLiveUpdate project. I changes the line (see the code above ... strData() = ....) And that works fine in the vb group. Any ideas? Sorry to post so many questions.

----------


## Wokawidget

1) Not sure why. Worked perfectly well with the text file and code I used. I used notepad to create the text file.

2) 
a) Yes, in the UI just display the version number property. You will have to add a property to the update class to handle this and populate it from the text file.

b) Silent...errr....yes. Look at my demo as it has this in there.

3) Yes, or you could combine that with my multi threading code to run it aync. The link is in my sig and full source code and demo code is available to download.

4) No idea. Add MsgBox's to parts of the code and use them to trace when it gets up to.

Alas I do not have VB6 on my PC anymore and so cannot run this code  :Frown: 
I'll get it put back on soon. 

Woof

----------


## SmartySoft

Thanks for the cool program Woka

i have a problem with my app
i want to liveupdate a *database* on the users PCs with last new rows i added to it 
could your app help me

----------


## Wokawidget

I supose yea.

What u can do is have an Update.txt file or something that either contained the raw data, or some SQL scripts to update the DB.

Then just use the liveupdate app to download this txt file....once downloaded then your app can do what ever it wants with the file/data in the txt file.

Woka

----------


## zeem

VB Code:
goood work


 :Alien Frog:

----------


## SmartySoft

thanks dear I will try

----------


## Alvanian

I realize that this is an old thread although Ive been trying to use this script. Got it working and all and trying to modify it slightly to allow each file to specify its own filepath in the updates.txt This is what I came up with. I modified the OpenFile() sub in download.cls to this.



```
Private Sub OpenFile()
Dim temp As String
Dim parse() As String
    If Dir(mstrLocalPath) = vbNullString Then
        Err.Raise 76
    End If
    If Not (Dir(mstrLocalPath & GetFilename(mstrRemoteFile)) = vbNullString) Then
        Kill mstrLocalPath & GetFilename(mstrRemoteFile)
    End If
    If InStr(GetFilename(mstrRemoteFile), "Updates.txt") > 0 Then
    mstrLocalPath = "C:\Program Files\Sony\Station\Infantry\nodbot\"
    mlngFreeFile = FreeFile
    Open mstrLocalPath & GetFilename(mstrRemoteFile) For Binary Access Write Lock Write As #mlngFreeFile
    Else
    Open "C:\Program Files\Sony\Station\Infantry\nodbot\Updates.txt" For Input As #1
    Do Until EOF(1)
      Line Input #1, temp
      parse = Split(temp, ";")
    If InStr(GetFilename(mstrRemoteFile), parse(3)) > 0 Then
    mstrLocalPath = parse(6)
    End If
    mlngFreeFile = FreeFile
    Open mstrLocalPath & GetFilename(mstrRemoteFile) For Binary Access Write Lock Write As #mlngFreeFile
    Loop
    Close #1
    Kill "C:\Program Files\Sony\Station\Infantry\nodbot\Updates.txt"
    End If
End Sub
```

Anybody have any other ideas?

----------

