Not all programs are well behaved.
I had one program die, and complain about not being able to find mscoree
or the like. And I, as a user, was supposed to piece together from that,
that I needed .NET. I had to Google, to associate a missing mscoree.dll,
as being a .NET issue.
http://answers.yahoo.com/question/index?qid=20070225114716AA4nBZr
With some programs, the *installer* may be doing a check, and
identifying that prerequisites are missing. And that's how an
ugly scene, with error messages, is avoided. I think some other
ATI video card I had, installed .NET for you, as a separate
step.
A typical .NET program, might be distinguished by having a relatively
small file size, for its functions. Other than that, I don't know
how you'd know what the program depended on. There are other runtime
libraries other than dotNET, such as visual C runtime. So this kind
of problem has happened before (program delivered, without the
needed redistributable runtime libraries).
A tool like this, can scan an executable for dependencies, but
I bet it won't pop up a dialog and say "you need .NET". They expect
developers to use a tool like this, to get low level information.
http://dependencywalker.com/
In the Linux/Unix world, I'm used to using this program, called "LDD"
which stands for "List Dynamic Dependencies". It tells you what
libraries a program is about to call. And from this,
you can kinda predict whether the program will start or not.
http://linux.die.net/man/1/ldd
*******
A famous program for demonstrating .NET, would be paint.net . I think,
as time has passed, the version(s) of .NET that have to be installed,
have increased for this program. At one time, it might have been using
2.0, but may need some of the higher ones now as well. Kind of a
shame, because when I went to test this, I didn't have the
version loaded that was needed.
http://www.getpaint.net/
Paul