I have a project where I need to provide the user a download package with some sensitive data in it. The data needs to be encrypted. After they download it, they need to be able to view it (no editing required). For this question, let's approximate the data as a series of static html files. Because the data is sensitive, it needs to be encrypted any time it is on disk.

We are thinking of providing the user with a download option that would give them a zip file containing two files:

  • A data file (we'd probably use an encrypted zip file behind the scenes) with the data they asked for
  • An application to view the data that would appropriately prompt for a passphrase and handle decrypting the data and displaying it via an embedded web browser.

Additional details:

  • Users are not under our control. They are consumers.
  • We are not worried about cross platform in this question. This is just about Windows. We will have a separate download for Mac users.

Get to the question already:

For that application we need to create, we're internally debating if it is reasonable for that app to be a .NET winforms application. We want a single .exe, and we want the download to be reasonably small (e.g. 100k).

  • Dare we use the .NET framework (we don't need to use a particularly recent version of .NET--2.0 would be fine)?
  • Is it reasonable to assume that most consumers have .NET on their machines now due to Windows Update?
  • Is it reasonable to ask the ones that don't have it to install it?

We know that not 100% of users will have .NET installed. The real question is if it is reasonable to ask them to have it in this day and age.

P.S. Does anyone know of any reliable statistics of what percentage of people actually do have .NET installed already?

  • Keep in mind .NET needs to be both installed and not corrupted/missing files. Oct 5, 2010 at 20:28
  • Don;t forget to handle users who are on other operating systems besides Windows, woudl they have .net?
    – HLGEM
    Oct 5, 2010 at 20:29
  • @HLGEM, as mentioned, we will have a separate download for Mac users that contains a similar Mac-native client. Linux users just won't be able to use this optional support for offline data access and will have to just view the data online in their web browser.
    – Erv Walter
    Oct 5, 2010 at 20:34
  • What about Macs?
    – JeffO
    Oct 5, 2010 at 20:35
  • Missed seeing that part.
    – HLGEM
    Oct 5, 2010 at 20:58

10 Answers 10


By default, Windows XP doesn't include any version of the .NET framework. Vista, and Server 2008 include .NET Framework 3.0, Windows 7 and Server 2008R2 include .NET 3.5, and Windows 2000 can't support anything above .NET 2.0.

With that in mind, it comes down to the OS spread in your target audience. I would list the requirement prominently on the download page and provide a link to Microsoft Update/Downloads section for the framework download, in addition to your application download.


I don't know if it's reasonable to ask them to have it or not. However, I do know that customers are often unreasonable, so I don't see that it matters. If you're dealing with a limited number of customers, ask them. If you're dealing with more customers than you can reasonably talk to, or you're going to pick up customers over time, just make sure they see the requirement before buying.


What version of Windows are your users on?

If it's Windows Vista they'll have .NET 3 installed by default and if it's Windows 7 they'll have version 3.5. Source.

That doesn't help if they're on XP, but as Microsoft have just stopped support for SP2 they should be on SP3.

If you use something like "ClickOnce" (there are other installers available) you can make the relevant version of the .NET framework a prerequisite and it will download and install it for you - it's not included in your installer. If you are worried about the size of the download you could go to .NET 3.5 or 4 and make the Client Profile which is a much smaller download, though the .NET 4 version is more flexible.

  • Anyone in the general public might be a user. I would expect we will have some folks still on XP.
    – Erv Walter
    Oct 5, 2010 at 20:21

A while back I read some posts from Paint.NET on the install process, and how to improve it. Have a look at these two blog entries. The first describes the awkwardness of installing the .NET Framework separately; the second describes how the author integrated it as part of the install.

The Paint.NET install experience — Part 1, version 3.xx (the old bad way)
The Paint.NET install experience — Part 2, version 4.0 (the new good way)

So even if you're going to require the .NET Framework, and you're not sure whether the users will have it, you can at least integrate its installation with your app in a reasonably painless way.


Many corporate users are not on the latest version of Windows (Still on XP), but I think more home users have upgraded because of new hardware. Downloading and installing is a little bit of a pain. Is this file usually a one-time thing per client or will they continue to get files in the future?

What are your other options? Are password protected Acrobat files enough? It would be a lot easier to block: saving, printing, and copy and pasting.

Seems like you're reinventing the wheel, but I don't have all the specifics.

  • Encrypted PDFs might be a workable solution, and I think it is more reasonable to assume acrobat reader (at least on Windows). We are trying to avoid reinventing the wheel :) The ideal solution would just be an encrypted zip file, but Windows does not support decrypting zip files that use AES encryption and assuming people have WinZip is much more unlikely than .NET I think.
    – Erv Walter
    Oct 5, 2010 at 20:17
  • P.S. It is largely home users and they will get updated files periodically (i.e. not just one-time download).
    – Erv Walter
    Oct 5, 2010 at 20:19
  • I think a .NET solution would work. Users would have Acrobat, but I don't know if there are licensing issues on your end to create the encryted files.
    – JeffO
    Oct 5, 2010 at 20:32

I did some research on the subject by tracking data on over 10000 installations accross the world for a desktop application targeting the .Net Framework 3.5 sp1. Only a bunch (about 10) did not have the proper framework installed. I removed the heavy .net framework installation file from the installer, and did not notice any problem yet.

I highly suggest you to conduct the same study in your market and decide based on the results rather than on answers you could get on communities like this one.

  • Or probably people that don't have a .NET already installed never bothered with your program. You may be limiting your own user base, especially for new users, who are not upgrading from a previous version of your program.
    – Lie Ryan
    Oct 6, 2010 at 9:32
  • Lie, that's exactly why you need to conduct your OWN studies. My customer base is probably a lot different that yours. Online stats will not help you either.
    – user2567
    Oct 6, 2010 at 9:37
  • No, what I meant is if you conduct a study on your own costumer base, either they were upgrading (in which case, they already have .NET) or they're new users (in which case, they have already learned about your program's requirement). Either way, studying your own costumer base is very likely to be skewed towards having .NET. Many potential new users is likely to be turned off when they read your program required .NET, and looks for another solution. You are limiting your own new customers base, if you base your decision on that.
    – Lie Ryan
    Oct 6, 2010 at 9:48
  • The 10.000 are only new users that did not knew anything about requirements (they are not published, just a download link to an executable).
    – user2567
    Oct 6, 2010 at 9:53

Depends on your demographics...

If I wanted anyone[1] to be able to use it, I would finangle up a 32-bit app that would run on Win98 and W7.

That probably means C++/MFC stuff.

[1] Anyone with a machine younger than 12 years old that has an internet connection that is running Windows 98+.

  • So "anyone" doesn't include non-Windows users? -feels sad that I am nobody- Oct 5, 2010 at 22:43
  • @mathepic - the questioner has already clearly stated that this question concerns the Windows distribution, and that there are separate Mac and Linux distributions that he is not asking about in this question. Oct 5, 2010 at 23:30
  • 1
    Or Delphi/VCL stuff - but use an older version. C/C++ isn't the only native language for Windows. Or even VB6 (sorry to swear).
    – Gerry
    Oct 6, 2010 at 3:37
  • @Gerry: True. :) I just hadn't heard Delphi bandied about much in the last 8 years so I'm not used to thinking of. Oct 6, 2010 at 4:00
  • Indeed. I've worked with it for 12 years, and am finding it hard to find permanent employment, which is a pity as it has seen many enhancements (full Unicode, generics, anonymous methods (closures)) in the past couple of years,
    – Gerry
    Oct 6, 2010 at 4:05

.NET 4 is now part of Windows update (the KB was issued in July 2010). As long as the machine is current on their Windows updates, then you are pretty much guaranteed they have .NET 4.


If you know, that 100% of your customers don't have it, why did you code the application with .net?

You could have use Java and create a Web-Start Application.

But in fact, you can bundle the .net framework with the installer. If the Customer trust you to install your Application, he will install .net, too.

  • 7
    A Java web start application would require Java which is just as bad as requiring .NET. And we can't include .NET in the installer, that would make the download too large. As mentioned, we are looking for a small download (i.e. 100k or less).
    – Erv Walter
    Oct 5, 2010 at 20:16
  • Java web start application is slow too!
    – D. L.
    Oct 5, 2010 at 20:18
  • You did not write about the 100K download-size.
    – ckuetbach
    Oct 5, 2010 at 20:21
  • Sorry about that not being more explicit (I will edit), but it was implied by, "and we want the download to be reasonably small."
    – Erv Walter
    Oct 5, 2010 at 20:23

Just make sure that the package you ship contains a dependency on the required version of the framework. Then the package manager the user has will pull the necessary framework version and install it before your package.

Oh, the operating system you target has a very crippled package management system, which can't do this? It should be a bad OS then. Well, then you have only one option: require this framework installed and provide the link for user to do it. I don't see how users benefit, if a noticeable part of what developers do is devoted to useless compatibility with "standard" OS tools (this time could be spent for fixing bugs and adding features instead).

  • As much as I see how this (somewhat-truthful) answer could be seen as FUD, I don't see anyone explaining downvotes... Oct 5, 2010 at 22:44
  • 10
    Explanation of my downvote: Pavel offered absolutely nothing helpful in response to the question, just took the opportunity to bash Windows. Oct 5, 2010 at 23:31
  • 1
    Even better, use a language that doesn't require a huge pool of libraries to produce anything worth while, e.g Delphi on Windows ;)
    – Gerry
    Oct 6, 2010 at 3:40
  • 1
    @Gerry, the whole point is that developers want to use a language they know and find productive, which would boost their development speed, and allow to reuse the effort put into these libraries.
    – P Shved
    Oct 6, 2010 at 4:09
  • 1
    In the Delphi world libraries (commercial and Open Source) are normally only installed on the development machines - everything (other than OS and occasional third party provided DLLs) is compiled into a single exe. But sometimes OSS-C libraries are wrapped in DLLs to call from Delphi
    – Gerry
    Oct 6, 2010 at 7:57

Not the answer you're looking for? Browse other questions tagged or ask your own question.