Can I programmatically install new version of .NET using .NET? - c#

Let's say, I have a .NET 2 installed. Can I programmatically install version 4 using .NET 2?

Of course you can. Include the required installation package and then Process.Start, or even better: make a setup and deployment project for your application and set a launch condition to .NET 4.0 so that when someone tries to install it it will verify the presence of .NET 4.0 and if not ask to install it:
Remark: in the screenshot set .NET 4.0 as launch condition (step 4)

You can do this (just shell out to installer MSI and msiexec.exe), but there are things like lock downs and other security issues to consider. But it's better practise to tell the user to install it and then install your program. Your installer will need to be .net 2.0 code to do this.

Sure. Just start the installer process.
Process.Start("dotnetfx.exe");

Related

Installshield without installing required software window first

I created a setup project that has as required software .NET 4.5. Right now if I don't have installed .net 4.5 the installation will start with installing .net framework first. I would like to avoid this behavior and to receive directly an error message saying that I don't have installed .net version on my computer. Is that possible?
Thank you in advance.
Regards,
Vlad
It sounds like you have enabled the .NET 4.5 prerequisite. Prerequisites are designed to check the machine and conditionally install a redistributable before the main installation begins.
The flip side of this is a Launch Condition, at least in a basic MSI project. Use a System Search to detect whether .NET 4.5 is present (feel free to edit the .NET 4.5 prerequisite to get an idea what to look for, or just research it yourself), and add a Launch Condition with the message you want to show.
It's actually a really good idea to set up the Launch Condition even if you are including the prerequisite, just in case someone launches the .msi file without going through setup.exe's prerequisite checks. And for your case, where you don't want to offer the automatic installation, just stop including the prerequisite.

Visual Studio Setup wizard with framework

I have create a application that uses the .Net framework 4. I have created a installer with the setup wizard, but when i run the installer it wants to install .Net 4 client . If i try to start the application it says this application needs .Net Framework, version 4.
Anyone knows how to fix this.
no magical way around this.
download the .net framework http://www.microsoft.com/download/en/details.aspx?id=17851
and add it to your project. set its installation to run before the installation of your program.

Show a custom popup if someone doesn't have the required .NET-framework to run an application

I built an application for version 4 of the framework. When I try to run it it says:
In order to run the application, you have to install the following version of the .NET-framework first: v4.0 [...]
That already isn't too bad but it would be great to display a custom message, maybe even with a link to the latest version of the framework.
Is that possible?
There is no straight-forward way of customizing this message. In fact, the message about the unsupported version of the framework is coming from mscoree.dll (i.e. the version of mscoree.dll present on the system).
What you can do is write your own launcher in C++, that will first check whether the required framework version is installed, possibly display a custom message and then host the CLR inside the launcher.
If your application uses a Windows installer package (Wix) then consider listing the framework as a prerequisite, which will let the installer do the check for you and also offer the user the chance to download the framework.
It might not be the best installation mechanism, but if you create a ClickOnce installer you can set the required .NET framework for your application and it will download and install it if it's not present on the target machine.
Yes it is possible, but what platform should the message use?
You would need a bootstrapper, a wrapper that checks and then starts your App.
You could bootstrap with a .NET 2 application if you can assume that Fx2 is installed. But in the future you might see PC's that have Fx4 but not Fx2.
So you will need an unmanaged wrapper to cover the widest range of possibilities.

Is it OK to redistribute the utility installutil that ships with .NET?

I have a .NET service built with C# and it requires install util to be properly installed. However I don't trust that it's always in the right place when my installer runs on a customer's machine. Does Microsoft allow you to freely redistribute installutil with your products?
I'm pretty sure it is part of the .Net distribution package, so it should be there already on any machine that has .Net installed. And if your install msi has a module to do the .Net install for whichever CLR version your app requires, then that will install the InstallUtil for you...
It should be ok, is it not part of the .net framework redistributable which is free? you can always just copy it from the framework folder before calling it, assuming the framework is always in the same place?

How to safely check .NET Framework version using a .NET Framework version that may not exist?

I have an application built with .NET 3.5. If a user runs it without having .NET 3.5 installed, I want to have control of what they see and perhaps provide a message that they can understand (with a link to .NET 3.5) versus unhandled exception stack traces. But if they don't actually have .NET 3.5 how can my application control anything?
Are you assuming that at least SOME version of .NET is installed?
You could write a small loader to be compatible with all versions to do the check.
Or if .NET is not installed, found a simple batch program (though this could easily be done in C++ if you prefer).
#ECHO OFF
SET FileName=%windir%\Microsoft.NET\Framework\v1.1.4322
IF EXIST %FileName% GOTO Skip
ECHO.You currently do not have the Microsoft® .NET Framework 1.1 installed.
ECHO.This is required by the setup program for MyApplication.
ECHO.
ECHO.The Microsoft® .NET Framework 1.1 will now be installed on you system.
ECHO.After completion setup will continue to install MyApplication on your system.
ECHO.
Pause
SET FileName=
Start /WAIT .\dotnetfx.exe
Start .\Setup.exe
ECHO ON
Exit
Tongue Tiedkip
SET FileName=
Start .\Setup.exe
ECHO ON
Exit
This might also help.
Better yet, you could use an installer technology, such as Wix or a Visual Stuido setup project, that checks during installation that all the prerequisites for you software, such as a particular .NET framework runtime exist. If not, it will install them, or at least tell the user where to get them and what to do next
You could instead consider using an installer that requires 3.5 is installed. That would prevent the app from getting to the user in the first place if they can't run it.
You need an non .NET EXE file that checks for the .NET runtimes. It could be written in anything that you know exists in the target PC. For example, if targeting Windows 2000 or above, you know the Visual Basic 6.0 runtime is present, so your installer could always start a Visual Basic 6.0 splash application that checks for the runtimes before starting your .NET EXE file. A better way would be to write a C++ application that didn't rely on any runtime other than the Windows APIs.

Categories

Resources