Implementing an auto-update mechanism - deployment

I have a question about updating applications.
If I want an application to always be up-to-date, I would probably implement a launcher that checks if it is the latest version.
What are the pro's and con's of this approach, and is there an other way to achieve this behavior in compiled programming languages (specially .NET / Java)?
How would I update the launcher? I have seen applications that can do that also.
Thanks

The method of writing a launcher and checking for update is usually followed by all the applications that checks for updates. Although no necessary. Alternative to this can be a call back function which will send a "request of update" from server(the dev machine) to clients(where application is installed) when the server has a new update.
Pros of the having client to check for available update at server: Widely used
Also there are buildin classes (available for .net http://msdn.microsoft.com/en-us/library/ms404263.aspx)
Cons: Will keep checking even if update is not there (every time application is launched or timeout occurs)
Pros of callback method: no un necessary traffic (even its a very small amount still a request is made)
Cons: I dont remember of seeing any apis for such a method. So you need to implement these all by yourself.

Perhaps these links can provide some information:
Code Project: Application Auto-update via Online Files in C#
Writing my own Auto Updater
AutoUpdate using Google Code
What is the best practice to auto upgrade MSI based application?

Related

Ensuring client updates to latest api version

I'm learning about the REST architecture style, and there are some things I don't understand when it comes to developing a back-end api for clients.
I've read about various approaches to versioning an http api, which all make sense, but how do you indicate to a client, when he's using an outdated version of your api, that he needs to update his version? Is there a way to do this without physically contacting the client and telling him that he needs to update his version?
I was thinking there might be some way to require the client to indicate his current version and give an appropriate message if it's outdated. Is this standard or even feasible?
Typically, clients update under one of two circumstances. Either they want functionality that's available in a more recent version, or you're dropping support for a prior version.
If you're planning on dropping support for an API version, you should definitely be notifying any customers you can find proactively. If they rely on your API version, and it disappears with no warning, they're going to be former customers.
In the vast majority of cases, clients of your API will not be scanning network traffic looking for a header or other indicator that the API is changing. Asking them to do so is non-standard and almost certainly not feasible.
Also, dropping support for an API version is a major shift. It causes upheaval in all of your clients, forcing them to make a code change in their applications by a date of your choice. It's not something to be done lightly.

Crossrider Extensions - are they safe

I have started writing an extension using Crossrider, and really like it. But I have read some negative stuff about them being a browser hijacker - in particular search.crossrider.com
I am unsure if search.crossrider.com is a malicious extension built using Crossrider, or Crossrider itself. Among other places, this is a link which recommends you delete this.
http://forums.anvisoft.com/viewtopic-45-1190-0.html
Before I continue developing in this, I thought I would ask the experts.
Any comments, gratefully received.
Thanks
Crossrider is very safe to use!
We had some incidents in the past where developers had tried to write malicious extensions using our framework, but with our security co-operations with Google and Facebook we managed to mitigate them. (and the fact that we are a cloud-based solution allows us to remotely disable any malicious use that is against our T&C.)
Besides being very safe Crossrider is also a free and a must-have tool for any extension developers. (There are more than 20,000 developers the Crossrider community)
Crossrider not only provides the technical solution of building the API to support all major browsers including Chrome, Firefox, Internet Explorer and Safari, but also gives the developer further tools and features to solve and simplify all the heavy lifting tasks when it comes to developing and publishing browser extensions:
Full statistical dashboards with information on numbers of Installations, Active Users, Uninstalls which can be broken down to per-country and per-browser usage.
Crossrider provides an online IDE that developers can actually start coding extension online in matters of seconds. The developer doesn't need to download any development packages to their computer (unless they really want to), and as you develop, you see your code changes take affect in real-time on your browser.
Another feature is Crossrider's auto code update mechanism, where any code change (including new releases or bug fixes) is getting published to all existing users (and new obviously) in matter of hours. Regardless if you have several users or millions.
Crossrider also provides advances publishing tools such as embeddable installation widget for your website, direct download links and more.
One of those publishing tools is the Advanced Window Installer that can install your extension on all browsers automatically. This installer can be easily configured to the developers needs and we even supply with an automated Code Signing Service where developers can sign their installers in real-time.
24/7 Support - We are really keen about our support. We always strive to keep our response time to the minimum and we treat the smaller developer(s) as it was our most important client. We even try to help developers when it's not 100% Crossrider related questions as we also believe in good karma :)
Hope this helps your decision of working with Crossrider.
p.s Not sure 100% about the search.crossrider.com thread you have mentioned but as we do not have any affiliation with this subdomain (in fact, it does not even exists on our DNS records) you can rest assure this has nothing to do with Crossrider as a framework.
(Disclosure: I work for Crossrider)

Persisting an Approval Process to SQL

I'm starting work on a small web based request system which needs to implement a two-step approval process (C# mainly, most likely MVC3).
I have come up with a simple workflow diagram and can easily come up with code to move from step to step. However, I'm having trouble coming up with a way to persist workflow related "tasks" or "steps" in the database.
For a request, an admin would approve/deny it when it comes in, then it's goes into "working" state. At compeletion, user is requested to approve/deny "QA" step.
Can anyone provide some directions on this?
I don't want to use Windows Workflow Foundation, since I don't have time to learn yet another new framework. And Google is not being too helpful, any mention of the word "workflow" keeps bringing results for WF.
Learn WF.
Why? All you're doing by inventing your own new framework is forcing the next people to maintain your code (or those who work with you) to "learn yet another new framework," as you so put it. Do you want to write all that new documentation or do you just want to point someone to MSDN?
WF4 is actually pretty easy to learn, way better than WF3. Before you throw away the idea completely, at least read this:
A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4
http://msdn.microsoft.com/en-us/library/ee342461.aspx
If you're looking at a web based system, you may use Windows Server AppFabric to provide the persistence and monitoring layer and a WCF workflow service to host the workflow. The time you spend learning the basics of this will be far less than the time you spend inventing your own system. I guarantee it. You can install AppFabric via the Web Platform Installer tool along with SQLEXpress to persist.

Application Updater

does anybody know a good, flexible and free component for automatic application updating beside ClickOnce (not necessarily .NET only)?
In the past there was the Updater Application Block from Microsoft. But as far as i know its not maintained anymore.
What Technology are you using to keep you applications up to date?
We have designed our own updater logic based on WiX & .NET for our .NET apps. Logic is fairly simple and couple with continuous integration (so that we can fire a new release in a single click). Everything is released as open source. You can have a look at the code at http://code.google.com/p/lokad-sdk/ and more precisely at http://tinyurl.com/kwrhvo (direct app source code).
Try PADUpdater it's freeware and doesn't need any configuration as it uses your PAD.XML file to get the settings.

Using Clickonce Deployment with Background intelligent transfer service

We are thinking about the deployment and update strategy for a fairly large framework throughout our organization. The application will be in .NET 3.5 and will run on Windows XP, Vista and Win 7 machines. I have used Clickonce few times and it works well for sure.
Has anyone thought of, or have implemented the BITS feature of Windows with Clickonce. I feel the trickle upgrade approach of BITS would make the frequent framework updates pretty user friendly.
Any help appreciated.
The thing is that BITS is used to transfer data in the background, while CLICKONCE is more-or-less a JIT downloader of those DLLs/executables needed to install/update/run an application.
Additionally, ClickOnce is an out-of-box experience. It already works, whereas a BITS solution (even one using the old Updater Application Block) requires you to roll out a framework for updating the application.
Also note that there's nothing saying that a BITS solution would be a "trickle" approach. One could have it download the file in one batch, on high-priority and basically emulate the functionality of ClickOnce, or one could build it to download updates in the background similiar to how FireFox performs updates.
Finally, be aware that ClickOnce does have security ramifications in what the ClickOnce deployed application is allowed to do by default, or even what resources it is allowed to communicate with by default. Read more here.
I have worked on a project that uses BITS and ClickOnce but not in the same context as what you want. ClickOnce was the mechanism for downloading the application which was very light, as light as it could be made. Then using a combination of Microsoft Synchronization services and BITS to synchronize data and pull down artifacts (around 2 GB).
Remember with ClickOnce you do not need to force the user to upgrade before opening. You have the ability to upgrade the application whilst the application is in use and then the next time the application is started the new version will be run.
I doubt that Clickonce would be of much help, because it's unlikely that you could extend it to use BITS. Maybe a combined approach would work where you initially deploy a small custom downloader via Clickonce which uses BITS to get the remaining parts and does all future updates.