Alaska Software Inc. - Loadfromurl heavy traffic network before communication
Username: Password:
AuthorTopic: Loadfromurl heavy traffic network before communication
Nico HoubenLoadfromurl heavy traffic network before communication
on Mon, 30 May 2005 20:32:02 +0200
Hello Everybody,

My app uses the LoadFromURL when the application is started the firsttime 
there is a lot of traffic on my network before the request is done.
The second time (without clossing the app) the request is done immediatly.

The app is located on a networkdrive (novell/Samba/Win server all the same), 
if the app is started from a local drive there is no extra traffic the first 
time either.

It looks like windows sends the whole app over the network ?!

Any suggestions ?
I was thinking about the windows cache but cann't find the right settings / 
or sollution.

Kind regards,

Nico Houben
Car-Systems Heerlen
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Tue, 31 May 2005 10:20:04 +0100
Nico,

> My app uses the LoadFromURL when the application is started the firsttime 
> there is a lot of traffic on my network before the request is done.
> The second time (without clossing the app) the request is done immediatly.
> 
> The app is located on a networkdrive (novell/Samba/Win server all the same), 
> if the app is started from a local drive there is no extra traffic the first 
> time either.
> 
> It looks like windows sends the whole app over the network ?!

I'm not quite sure what you mean here - LoadFromUrl() simply connects to
the requested server, requests the resource and accepts the resource when
the server downloads it.  If the resource you download is very large, then
of course you wil have to wait for it to arrive.  The next time, the server
may well respond with a "resource unchanged" code, in which case
LoadFromUrl() will fish the resource from the cache avoiding the download
altogether.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

Do not think by infection, catching an opinion like a cold.
Sander Elias Re: Loadfromurl heavy traffic network before communication
on Tue, 31 May 2005 11:36:36 +0200
Hi Nico,

>My app uses the LoadFromURL when the application is started the firsttime 
>there is a lot of traffic on my network before the request is done.
>The second time (without clossing the app) the request is done immediatly.
>
>The app is located on a networkdrive (novell/Samba/Win server all the same), 
>if the app is started from a local drive there is no extra traffic the first 
>time either.
>
>It looks like windows sends the whole app over the network ?!
the first time you use the loadurl function, it loads the needed DLL
form your app directory. this is the network traffic you see. on later
calls the needed DLL's are already loaded, so there is no additional
traffic needed.

my advice would be, install your app's on the workstations, not on the
server. A medium size application, including the needed DLL can be
around the 40-50Mb (exe's and DLL's) most off it will be read when you
start the application, but as you have noticed, there are function
that calls in extra, so adding to the network traffic.
if you have a small network, this is not a big problem, but if you
have more then, lets say 6, users you will notice that every boot of
your program will cost you approximate 40-50 Mb network traffic.

regards
Sander Elias
Nico HoubenRe: Loadfromurl heavy traffic network before communication
on Wed, 01 Jun 2005 07:57:52 +0200
Hi Sander,

>>My app uses the LoadFromURL when the application is started the firsttime
>>there is a lot of traffic on my network before the request is done.
>>The second time (without clossing the app) the request is done immediatly.
>>
>>The app is located on a networkdrive (novell/Samba/Win server all the 
>>same),
>>if the app is started from a local drive there is no extra traffic the 
>>first
>>time either.
>>
>>It looks like windows sends the whole app over the network ?!
> the first time you use the loadurl function, it loads the needed DLL
> form your app directory. this is the network traffic you see. on later
> calls the needed DLL's are already loaded, so there is no additional
> traffic needed.
>
> my advice would be, install your app's on the workstations, not on the
> server. A medium size application, including the needed DLL can be
> around the 40-50Mb (exe's and DLL's) most off it will be read when you
> start the application, but as you have noticed, there are function
> that calls in extra, so adding to the network traffic.
> if you have a small network, this is not a big problem, but if you
> have more then, lets say 6, users you will notice that every boot of
> your program will cost you approximate 40-50 Mb network traffic.

Thanks for your reply first.

That's what I thought of first but then I noticed that it depends on the 
Workstations/Server setting because the whole EXE is transported (66 MB) 
over the Network and not just a  DLL. The od thing is that some networks 
(same server/workstations) does this and others don't.

Kind regards,

Nico Houben
Sander Elias Re: Loadfromurl heavy traffic network before communication
on Wed, 01 Jun 2005 08:58:30 +0200
Hi Nico,


>Thanks for your reply first.
You're welcome.


>That's what I thought of first but then I noticed that it depends on the 
>Workstations/Server setting because the whole EXE is transported (66 MB) 
>over the Network and not just a  DLL. The od thing is that some networks 
>(same server/workstations) does this and others don't.
Are you sure it is the application itself that gets loaded? loading a
bunch of DLL's may amount to the same account off network traffic.

for the difference between workstation, there can be lot of reasons
just to name a few:
  1. more memory, so thing's don't "swap-out"
  2. some off the DLL's local
  3. another application has already loaded the DLL's
  4. different rights on the network share.
  5. different os's

and this list can go on for quite a while.

I saw you are from the Netherlands,
If you would like you can meet me at one off the XXP (www.xxp.nl)
meetings, and I can show you how to make an installer that does the
workstation upgrade(s) automatically, so there is no problem in
installing them local. This would solve your network-traffic issue!

regards
Sander Elias
Anand GuptaRe: Loadfromurl heavy traffic network before communication
on Thu, 02 Jun 2005 18:04:58 +0530
Sander

Would love to know the way you auto-update your nodes.

Anand

"Sander Elias" <Sander@eso.nl> wrote in message
news:2lmq91509l2fiuh0c2e8b6120k883raj98@4ax.com...
> Hi Nico,

<snip>
> meetings, and I can show you how to make an installer that does the
> workstation upgrade(s) automatically, so there is no problem in
> installing them local. This would solve your network-traffic issue!
Sander Elias Re: Loadfromurl heavy traffic network before communication
on Thu, 02 Jun 2005 16:01:58 +0200
Andand,

it is a bit to much to tell it in a newsgroup message. this is one off
the things you can better show, then try to explain.

nevertheless I will try.
basically it is simple process. when you startup your program you
compare the date-time stamp off your install program (created with
innosetup or any other program like it) with the date-time stamp of
the previous install (I keep that in the registry)
if it is newer, I set a flag in the registry, store the date-time of
the new setup, and start the setup with runshell(setup....) and the
quit my app. 
next boot of your program you have to check if the flag is reset by
the install program, if not, reinstall. (this protects form a aborted
install)

This is the process in a nutshell,
if you want to know something more, just ask.

if there is enough demand, I will see if I can create a sample of
this.

this works fine in networks for local installation.
if you want it to function over the Internet, I have a tool that can
do this for you also, just drop me a mail.

regards
Sander Elias
Anand GuptaRe: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 12:34:12 +0530
Thanks Sander for your input.

I use something similar as well. Instead of keeping date-time stamp, I use a
field in a Table to store the version number (major and minor both).
Further after checking the version details, it looks for the Updater in a
particular location (specified in the Table again)...

I fire the updater program via RunShell and fire a QUIT for my application.

The reason I asked was I just wanted to be aware of a better way to do the
same.

Thanks for writing-by Sander

Anand

"Sander Elias" <Sander@eso.nl> wrote in message
news:h22u91tqtqu5rt8228l871iard249qdnn5@4ax.com...
> Andand,
>
> it is a bit to much to tell it in a newsgroup message. this is one off
> the things you can better show, then try to explain.
>
> nevertheless I will try.
> basically it is simple process. when you startup your program you
> compare the date-time stamp off your install program (created with
> innosetup or any other program like it) with the date-time stamp of
> the previous install (I keep that in the registry)
> if it is newer, I set a flag in the registry, store the date-time of
> the new setup, and start the setup with runshell(setup....) and the
> quit my app.
> next boot of your program you have to check if the flag is reset by
> the install program, if not, reinstall. (this protects form a aborted
> install)
>
> This is the process in a nutshell,
> if you want to know something more, just ask.
>
> if there is enough demand, I will see if I can create a sample of
> this.
>
> this works fine in networks for local installation.
> if you want it to function over the Internet, I have a tool that can
> do this for you also, just drop me a mail.
>
> regards
> Sander Elias
>
Sander Elias Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 10:14:29 +0200
Hi Anand,

>I use something similar as well. Instead of keeping date-time stamp, I use a
>field in a Table to store the version number (major and minor both).
>Further after checking the version details, it looks for the Updater in a
>particular location (specified in the Table again)...
I use date-time because it is easy to compare the date-time stamp of
the installer. the installer is also in fixed location. So when my
program fires it just checks the date-time off the installer. Easy on
my part, just drop a new installer in, and I'm ready. the rest goes
automagicly

>I fire the updater program via RunShell and fire a QUIT for my application.
same here.


>The reason I asked was I just wanted to be aware of a better way to do the
>same.
having a good installer is the most important thing here.


>Thanks for writing-by Sander
No thanks, you're welcome.

Regards
Sander Elias
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 11:01:02 +0100
Sander, Anand,

I thought you might like to hear about my take on this problem.

I've written a program which basically is a just a menu bar.  It looks for
DLL's in a certain directory, and loads them.  Each (package) DLL contains
some routines which identify it as a 'package' dll, and installs some menu
items on the menu bar.  Using this method, I can dynamically add new items
and new menu's simply by dropping another dll in the appropriate directory.

When the application boots, it calls LoadFromUrl() to download a
server-generated shtml page, which contains a directory listing. Since this
is dynamically created by Apache, I simply load any new dll's to the web
server and they immediately become visible.

The application compares the directory listing against files already
installed, using the date-time stamps, and downloads any newer dll's to an
'install' directory.

Next it generates a batch file, launches it and terminates.

The batch file calls a small C application which waits for the previous
application to vanish (you can use mutexes or monitor the status of the
application window), allows a short pause to allow the application to fully
shutdown, then copies the new files over the old ones (I also backup the
old files), and finally re-launches the original application.

By allowing for sub-directories one the web-server, I can also copy
non-package dll's, and in this way I can even upgrade an application from
1.82 to 1.90 just by copying the relevant files to the web-server.  Within
24 hrs, all my users are using the new version.

This mechanism has been slowly developing over the last 6 months, and
whilst not yet perfect, it is very promising.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

	A crow perched himself on a telephone wire.  He was going to make a
long-distance caw.
Mike Grace Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 11:15:23 +0100
Impressive stuff Phil,

How do you handle table updates?


Mike

Phil Ide wrote:
> Sander, Anand,
> 
> I thought you might like to hear about my take on this problem.
> 
> I've written a program which basically is a just a menu bar.  It looks for
> DLL's in a certain directory, and loads them.  Each (package) DLL contains
> some routines which identify it as a 'package' dll, and installs some menu
> items on the menu bar.  Using this method, I can dynamically add new items
> and new menu's simply by dropping another dll in the appropriate directory.
> 
> When the application boots, it calls LoadFromUrl() to download a
> server-generated shtml page, which contains a directory listing. Since this
> is dynamically created by Apache, I simply load any new dll's to the web
> server and they immediately become visible.
> 
> The application compares the directory listing against files already
> installed, using the date-time stamps, and downloads any newer dll's to an
> 'install' directory.
> 
> Next it generates a batch file, launches it and terminates.
> 
> The batch file calls a small C application which waits for the previous
> application to vanish (you can use mutexes or monitor the status of the
> application window), allows a short pause to allow the application to fully
> shutdown, then copies the new files over the old ones (I also backup the
> old files), and finally re-launches the original application.
> 
> By allowing for sub-directories one the web-server, I can also copy
> non-package dll's, and in this way I can even upgrade an application from
> 1.82 to 1.90 just by copying the relevant files to the web-server.  Within
> 24 hrs, all my users are using the new version.
> 
> This mechanism has been slowly developing over the last 6 months, and
> whilst not yet perfect, it is very promising.
> 
> Regards,
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 11:51:46 +0100
Mike,

> Impressive stuff Phil,
> 
> How do you handle table updates?

Well, in this particular case, there are no tables!

The application calls special routines in our WAA apps, which return
web-pages of formatted information.  Using LoadfromUrl() to fetch these
pages and HRF to extract the information.  It is very similar in priniciple
to SOAP.

As an example of some of things we do with this program:

1. Check certificate count status
   Each customer may have several policies, and can print their
   insurance certificates through our web.  We limit the number
   of prints for each type of policy that can be made each month
   to reduce fraudulent use.  This routine tells us how many certs
   any particular customer has printed for type of policy.

2. Reset cert count
   Occassionaly a customer has a good reason for printing more 
   than 3 certs in one month (possibly problems downloading/printing
   the PDF), so we have the ability to reset the counter.

3. Check cover status
   If we are contacted by an insurer or the police to check whether
   a particular vehicle/driver combination was covered on our policy
   on a particular day, we can send this query and return a list of
   each vehicle and each driver registered at that time.  The two lists
   are returned as HTML tables, the data is extracted and used to generate
   two XbpBrowse's.

I let the web application handle get/set of the data from the various
sources, since it already has that ability (I don't like re-writing
perfectly good existing code, and absolutely hate copying code from one
project to another - it means two locations to update during maintenance!).
All I have to do is 'tap-into' the features already available in the
web-apps, which is why I didn't end up writing new code for the SOAP
servers (which can't access some of the data sources without adding the
code to the SOAP projects).  Besides, using HRF or XML/SOAP - there really
is no difference with one minor exception.

With HTML, you can embed HTMLDOC supported tag-codes, which allow yo to run
the page through HTMLDOC to print it out. This means you can have
definitive page breaks, set formal page header/footer data, set page
margins etc.  The page still displays as normal in a web-browser too.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

When the need arises, anything within reach becomes a hammer.
Mike Grace Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 15:18:26 +0100
O.K. I understand.

Now for a hypothetical question.

If you had to make data structure operations using your software, how 
would you approach it?

Mike

Phil Ide wrote:
> Mike,
> 
> 
>>Impressive stuff Phil,
>>
>>How do you handle table updates?
> 
> 
> Well, in this particular case, there are no tables!
> 
> The application calls special routines in our WAA apps, which return
> web-pages of formatted information.  Using LoadfromUrl() to fetch these
> pages and HRF to extract the information.  It is very similar in priniciple
> to SOAP.
> 
> As an example of some of things we do with this program:
> 
> 1. Check certificate count status
>    Each customer may have several policies, and can print their
>    insurance certificates through our web.  We limit the number
>    of prints for each type of policy that can be made each month
>    to reduce fraudulent use.  This routine tells us how many certs
>    any particular customer has printed for type of policy.
> 
> 2. Reset cert count
>    Occassionaly a customer has a good reason for printing more 
>    than 3 certs in one month (possibly problems downloading/printing
>    the PDF), so we have the ability to reset the counter.
> 
> 3. Check cover status
>    If we are contacted by an insurer or the police to check whether
>    a particular vehicle/driver combination was covered on our policy
>    on a particular day, we can send this query and return a list of
>    each vehicle and each driver registered at that time.  The two lists
>    are returned as HTML tables, the data is extracted and used to generate
>    two XbpBrowse's.
> 
> I let the web application handle get/set of the data from the various
> sources, since it already has that ability (I don't like re-writing
> perfectly good existing code, and absolutely hate copying code from one
> project to another - it means two locations to update during maintenance!).
> All I have to do is 'tap-into' the features already available in the
> web-apps, which is why I didn't end up writing new code for the SOAP
> servers (which can't access some of the data sources without adding the
> code to the SOAP projects).  Besides, using HRF or XML/SOAP - there really
> is no difference with one minor exception.
> 
> With HTML, you can embed HTMLDOC supported tag-codes, which allow yo to run
> the page through HTMLDOC to print it out. This means you can have
> definitive page breaks, set formal page header/footer data, set page
> margins etc.  The page still displays as normal in a web-browser too.
> 
> Regards,
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 15:41:48 +0100
Mike,

> O.K. I understand.
> 
> Now for a hypothetical question.
> 
> If you had to make data structure operations using your software, how 
> would you approach it?

Depending on the datasource.

For SQL, it is easy - call a function which forwards an SQL command -
although for this type of operation I have direct access to the SQL engine
via the VPN, as I would probably just use the SQL Administrator application
(PGAdmin III).

For DBF operations I might simply add a function to create the new
structure, copy the existing table into it, delete the old table, close the
new table, rename the new table to the old table name, delete the index
file(s) and re-open the table (causes automatic reindex).

Generally, I'd simply put a test in the code which opens the tables and
restructure them on-demand - i.e. when the application attempts to open a
particular table, check the structure and update as necessary.

What I could do is allow new structures to be installed in a similar
fashion to new dll's - when a DBF is updated, copy the existing data in
before copying the new dbf to the data directory.  However, this is only
really suitable for adding non-mandatory fields (i.e. they don't have to
have a value) or extending a field from say 10 chars to 15.  Otherwise you
have to start worrying about default values, which is going to require more
than some generic chunk of code.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

Learn to pause -- or nothing worthwhile can catch up to you.
Mike Grace Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 16:56:05 +0100
Nice, nice.

But what if the data is multi user i.e. on the server, can you guarantee 
  that 2 workstations won't try and update at the same time or would you 
add the fields yourself (assuming the SQL database can handle structure 
changes whilst everyone is still logged in) then place the update ready 
for download?

Mike

Phil Ide wrote:
> Mike,
> 
> 
>>O.K. I understand.
>>
>>Now for a hypothetical question.
>>
>>If you had to make data structure operations using your software, how 
>>would you approach it?
> 
> 
> Depending on the datasource.
> 
> For SQL, it is easy - call a function which forwards an SQL command -
> although for this type of operation I have direct access to the SQL engine
> via the VPN, as I would probably just use the SQL Administrator application
> (PGAdmin III).
> 
> For DBF operations I might simply add a function to create the new
> structure, copy the existing table into it, delete the old table, close the
> new table, rename the new table to the old table name, delete the index
> file(s) and re-open the table (causes automatic reindex).
> 
> Generally, I'd simply put a test in the code which opens the tables and
> restructure them on-demand - i.e. when the application attempts to open a
> particular table, check the structure and update as necessary.
> 
> What I could do is allow new structures to be installed in a similar
> fashion to new dll's - when a DBF is updated, copy the existing data in
> before copying the new dbf to the data directory.  However, this is only
> really suitable for adding non-mandatory fields (i.e. they don't have to
> have a value) or extending a field from say 10 chars to 15.  Otherwise you
> have to start worrying about default values, which is going to require more
> than some generic chunk of code.
> 
> Regards,
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Mon, 06 Jun 2005 13:42:31 +0100
Mike,

> But what if the data is multi user i.e. on the server, can you guarantee 
>   that 2 workstations won't try and update at the same time or would you 
> add the fields yourself (assuming the SQL database can handle structure 
> changes whilst everyone is still logged in) then place the update ready 
> for download?

For SQL, all requests (fetch/update) are queued an handled serially.
This is the only way the server can guarantee the integrity of the database
- it's very much like the fact that DBF indexes get locked when a skip/seek
or update occurs.  Therefore, it is easy for you to add/delete or modify
columns in an SQL database even when multiple people are using it.  In
fact, since the datasets returned from queries are usually either static
(e.g. data is exported to a temporary table) or purely dynamic, making
column configuration changes is usually not a problem.

However, this is not an issue for me, so I haven't had to look deep into it
at all.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

Is death legally binding?
Sander Elias Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 17:11:03 +0200
>Sander, Anand,
>
>I thought you might like to hear about my take on this problem.
As always, this is welcome!


>I've written a program which basically is a just a menu bar.  It looks for
>DLL's in a certain directory, and loads them.  Each (package) DLL contains
>some routines which identify it as a 'package' dll, and installs some menu
>items on the menu bar.  Using this method, I can dynamically add new items
>and new menu's simply by dropping another dll in the appropriate directory.
<snip>
>This mechanism has been slowly developing over the last 6 months, and
>whilst not yet perfect, it is very promising.
This is also a nice way to do updates. But this is mostly for
"dynamic" applications (lots off modules, high frequency of updates.
Or software in the "test" stadium)
this system put's some restrains on how you can develop your app. for
example cross-calling functions (form one DLL to another) is hmm, more
challenging as in a normal app.
Also this adds a layer in the runtime that will cost extra runtime,
and resources. This can be fine for some app's, but not for all.

my app's do not get much updates, so there is no real problem sending
a complete app-setup once in a while. drop it in the on the right
place, and all network-nodes get it at the next boot off the program.
If I want I can decide to kick all current users out, so I know for
sure that they all are running the "current" version.

I have even a solution for sending the updates.
ad program boot it checks my "update-server", and if there is a new
update, it download's it. puts it on the right place (renaming the old
setup, so that there is a history of versions available) and starts
the update procedure. this mean 1 download for an entire "client"
network.

I as a programmer, only need to make a new setup.exe (or whatever it
is called) and drop it in the client-update-dir on my server, they
will get it the next time they boot my program.

just my 2 cents.

Regards
Sander
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Fri, 03 Jun 2005 17:10:10 +0100
Sander,

>>This mechanism has been slowly developing over the last 6 months, and
>>whilst not yet perfect, it is very promising.
>
> This is also a nice way to do updates. But this is mostly for
> "dynamic" applications (lots off modules, high frequency of updates.
> Or software in the "test" stadium)
> this system put's some restrains on how you can develop your app. for
> example cross-calling functions (form one DLL to another) is hmm, more
> challenging as in a normal app.
> Also this adds a layer in the runtime that will cost extra runtime,
> and resources. This can be fine for some app's, but not for all.

As always, what works in one scenario won't work in another.  However, for
the cross-calling dll's, I get around that very easily.  Each DLL
statically links DAUTIL.DLL, which contains all the 'common' code.
Additionally, I can access functions in the EXE and other DLL's by macro
compiling the call.  Since no (package) DLL is dynamically unloaded,
statically linking the common utils dll is not a problem.  Further, if I
add a function to DAUTILS for one package, all other packages automatically
gain access to it.

> I as a programmer, only need to make a new setup.exe (or whatever it
> is called) and drop it in the client-update-dir on my server, they
> will get it the next time they boot my program.

...which works well with infrequent updates.  My application was designed
so that I can add queries and reports on demand.  After testing the new
code (by simply dropping the DLL in my package directory), I post the new
dll to the web server and that's it.  What I didn't want to get into was
creating a new installation and notifying everyone there was an update.
When I started thinking about having the application looking for a new
install program automatically I started thinking about incremental updates
(i.e. just one DLL) and thought this would be the most efficient way to go.

Interestingly, since the main application is simply a menu bar (plus the
check-for-updates code), I took a bunch of utilities that I had written and
turned them into DLL's simply by changing the project file (package DLL's
are loaded using the DLL name as a prefix, so for THAT.DLL, Main() becomes
ThatMain() etc.).  Now I have all those utilities at my finger tips, and
better, I can have personal utilities and procedures available on my menu
bar simply by 'installing' packages that I don't give to everyone else.

As for speed, there is a slight delay during bootup when it checks the
website for updates, but since I backdoor into the webserver using a local
network address at 100Mbps, it is only really an issue for our home workers
(who all have broadband anyway).

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

My house is made out of balsa wood, so when I want to scare the
neighborhood
kids I lift it over my head and tell them to get out of my yard or I'll
throw it
at them. -- Steven Wright
Anand GuptaRe: Loadfromurl heavy traffic network before communication
on Sat, 04 Jun 2005 15:23:58 +0530
The emperor Strikes 

Am glad, I am on the right tracks.

(The C Application you have mentioned, can you send that/post it here ?). Am
working with a .NET built too (since we have few ppl working on .NET now).
But I would prefer a stand-alone tool (so that I can even update the version
update DLLs). Currently my updater is written in Alaska itself.

Am currently only using LoadFromURL() to check for versions (well moved from
.cgi approach to a simple TeXT file approach, after you gave me  a hint a
year ago or so).

Phil a query here, have you tested on machines with AntiVirus installed
(where you try to COPY/Read_Write an EXE file from your application. Do they
make a noise ? Also are you reading the whole updated EXE via LoadFromURL()
(using UUENCODED or something else method) and FWRITng the EXE/DLL on your
own ?

Anand

"Phil Ide" <phil@idep.org.uk> wrote in message
news:1t41fsylc3nv.dlg@idep.org.uk...
> Sander, Anand,
>
> I thought you might like to hear about my take on this problem.
>
> I've written a program which basically is a just a menu bar.  It looks for
> DLL's in a certain directory, and loads them.  Each (package) DLL contains
> some routines which identify it as a 'package' dll, and installs some menu
> items on the menu bar.  Using this method, I can dynamically add new items
> and new menu's simply by dropping another dll in the appropriate
directory.
>
> When the application boots, it calls LoadFromUrl() to download a
> server-generated shtml page, which contains a directory listing. Since
this
> is dynamically created by Apache, I simply load any new dll's to the web
> server and they immediately become visible.
>
> The application compares the directory listing against files already
> installed, using the date-time stamps, and downloads any newer dll's to an
> 'install' directory.
>
> Next it generates a batch file, launches it and terminates.
>
> The batch file calls a small C application which waits for the previous
<snip>
Phil Ide
Re: Loadfromurl heavy traffic network before communication
on Mon, 06 Jun 2005 13:47:39 +0100
Anand,

> Phil a query here, have you tested on machines with AntiVirus installed
> (where you try to COPY/Read_Write an EXE file from your application. Do they
> make a noise ? Also are you reading the whole updated EXE via LoadFromURL()
> (using UUENCODED or something else method) and FWRITng the EXE/DLL on your
> own ?

Yes, I fetch the web-page with the list of files from the server, and check
for updates.  I then use LoadFromUrl() to download these and place them in
special directories ready for installing.  The batch file handles
copying.moving them to the permanent location.

My AV doesn't care about which files have been modified.  It checks them
just before they are loaded, which allows updates to occur seamlessly.  AV
units which don't allow software to upgrade transparently without making
exceptions (i.e. the Windows/System32 etc. dirs) are IMHO bad software.

Regards,

Phil Ide

***************************************
* Xbase++ FAQ, Libraries and Sources: *
* goto: http://www.idep.org.uk/xbase  *
***************************************

Yesterday I saw a chicken crossing the road. I asked it why. It told me it
was
none of my business. -- Steven Wright