views:

95

answers:

3

I have an old Win32 application that I'm considering having someone port to an environment that's more flexible and easier to maintain.

The foremost requirement is the new version, like the Win32 version, must install and run without major headaches on Windows machines. In other words, almost all WinXP or later machines should be able to run it without first installing updates, a virtual machine, etc. For example, AIR is out because I would have to force the user to install the environment (I think). .NET, last I checked, has versioning issues that might force the user to have to upgrade (http://www.joelonsoftware.com/articles/PleaseLinker.html) but maybe this problem can be avoided by developing against an older version?

The secondary requirement is "everything else" - UI flexibility, ease of development, tool support, etc. But basically everything else is secondary to customers being able to run it easily.

I don't know enough about the state of the art of PC client development to guide my thinking here. Which runtimes have solved the installation issue?

Advice is very much appreciated!

+1  A: 

I suspect the easiest is the client/server model with a server back end and an HTML front end. I appreciate it's not your strict desktop model, but it offers a number of advantages.

You can choose whatever back end technologies you want, and upgrade/change them whenever you want, and all customers will see the changes. Your clients won't dictate the technology you use (at the back end), and you can gracefully degrade features at the front end depending on what your clients have. With DHTML/AJAX etc. you can have a rich interface. If necessary you can supplement this with the power of Flash and similar tools.

It does require that you run a server and your clients have network connectivity, but if that's permissible then I think the above is an option to be seriously considered.

Brian Agnew
That depends greatly on the complexity of the user interface... It's not what I would blindly choose over say, .NET 1.1 Winforms.
Aviad P.
Well, I don't know what's required. But don't forget rich interfaces such as GWT, which offer a powerful interface within the browser. Plus you can use Flash for complex stuff.
Brian Agnew
+1 for that as a general rule, although I second Aviad's comment. I say, look into developing client/server application, where the client end is using Silverlight / Flash / Adobe Flex as it's GUI if normal XHTML + jQuery aren't enough. This way you can have a beast server and perform many heavy tasks behind the scenes should the need arise. On that note, have a look at what cloud computing offers, such Windows Azure.
synhershko
A: 

Based on your comment, this sounds more like a service, aka daemon. For this you'd better using Win32 for power or .NET for ease of development. I would recommend using those two than other architectures; AIR for example is meant mainly for rich GUIs. If needed, you could always develop an application to access the service and help administrating it (or showing more results).

synhershko
Good point. There is a service component to this that is always running, and a nice UI component that the user interacts with occasionally. There's also some stuff on the margin between the two, like rich popups from the system tray.
Dan
Not sure if you were asking anything here... Anyway, again - depends on what your service does, code it with .NET (I'll go with 2.0 to make sure it has the widest support) or with Win32 C++ if you're doing heavier operations to save on time and computer power. For the GUI (and popups are also considered GUI) use whatever works for you. WPF (which is also .NET), WinForms, AIR...
synhershko
+1  A: 

Your link points to a 6 year old blog post. It has a disclaimer on the top: "Alert! This ancient trifle retrieved from the Joel on Software archive is well-paft its expiration date. Proceed with care."

Well, that's accurate. The .NET framework is nowadays installed everywhere. If not through Windows Update then preloaded on Vista and Win7. These days, getting a non-trivial native C/C++ app installed is considerably harder. Getting the right versions of the side-by-side DLLs deployed can be quite a headache. .NET clearly meets the "everything else" requirement.

Oh, and it has excellent support for writing services.

Hans Passant
Yes, that would be why I said "last I checked". So the key question is - can I avoid versioning problems, where sure they have an old version of .NET but not the one I was expecting and hence require an update.And for bonus points, what percentage of Windows PCs have each version of .NET installed? This info is easy to find for browsershare but not so much for .NET framework...
Dan
Bonus points? You don't have any to give. Anyhoo: http://stackoverflow.com/questions/933755/what-is-the-market-share-for-the-various-net-framework-versions
Hans Passant