Creating silent installs of audio and video codecs using K-Lite

Suppose you wish to implement a silent installation of audio and video codecs for windows. It may be that you wish to execute this as a pre-requisite for a main application you are installing, while avoiding dialog windows or command prompts from appearing while it is doing this. Hence the use of so-called 'silent' or 'unattended' installations. This post shows you how to create a silent installation of K-Lite audio/video codecs. Step 1: Download and install K-Lite codec installer Obtain the K-Lite codec installation software from this link, and double click the executable to perform a normal 'attended' installation. Step 2: Run the unattended wizard For the purpose of this demonstration I simply perform a 'vanilla' installation, pressing 'Next' in each step of the setup Wizard, as shown in the following screenshots. Feel free to tweak the unattended installation to suit your own requirements: K-Lite_7 K-Lite_8 K-Lite_9 K-Lite_10 K-Lite_11 K-Lite_12 K-Lite_13 K-Lite_14 K-Lite_15 K-Lite_16 And click 'Create': K-Lite_17 K-Lite_18 Step 3: Run the silent installation using the batch file created Observe that in your K-Lite program directory, you now have the batch file and configuration settings needed for an unattended install, which were not present before. For example: K-Lite_19 This includes the *.bat batch file containing the command line instructions needed to do a silent, unattended install via the k-lite executable and the .ini configuration file. Uninstall programs are installed as well. Something like this: @echo Installing: K-Lite Codec Pack @"K-Lite_Codec_Pack_910_Basic.exe" /verysilent /norestart /LoadInf=".\klcp_basic_unattended.ini" @echo Done! To verify that this batch file created actually works, experiment by first using Control Panel to remove your existing K-Lite installation, and then run the batch file that was created. Run this batch file using the command prompt: K-Lite_21 Verify that K-Lite is re-installed in Control Panel. For example: K-Lite_20 Running the silent install of K-Lite in C++ Running the silent install in C++ is also straightforward and can be accomplished via calls to the CreateProcess method. Just a few of the argument parameters passed to CreateProcess need tweaking. lpApplicationName used to set the location of the batch file or other executable we are running. Obviously the K-Lite executable and the .ini file also need to in the same location. In our example it is the klcp_basic_unattended.bat file created by the K-Lite MakeUnattended process. Given that this batch file contains everything we need to run the K-Lite application – the second parameter, lpCommandLine, normally used to set command line arguments, is set to NULL. Set the dwCreationFlags to CREATE_NO_WINDOW in order to to suppress the command prompt; otherwise use 0 to display it. Full code listing as follows:
#include <windows.h> 
#include <string>

// Silent un-installation of K-Lite codecs
int main()
{ 
	std::string batchFile = "klcp_basic_unattended.bat";

	// 1. The CreateProcess way	
	PROCESS_INFORMATION pif;                              
	STARTUPINFO si;           

	ZeroMemory( &si,sizeof( si ) );   
	si.cb = sizeof( si );  

	BOOL bRet = CreateProcess(
					batchFile.c_str(),			// Path to batch uninstaller executable
					NULL,						// Command parameters string - not needed
					NULL,						// Process handle not inherited
					NULL,						// Thread handle not inherited
					FALSE,						// No inheritance of handles
					CREATE_NO_WINDOW,	        // Suppress console window
					NULL,						// Same environment block as this prog
					NULL,				        // Current directory - no separate path
					&si,						// Pointer to STARTUPINFO
					&pif );						// Pointer to PROCESS_INFORMATION

	if( bRet == FALSE )
	{
		MessageBox( HWND_DESKTOP, "Unable to start program", "", MB_OK );
		return 1;
	}

	CloseHandle( pif.hProcess );   //Close handle to process
	CloseHandle( pif.hThread );    //Close handle to thread

	return 0;
}
Download the full Visual Studio 2010 package, containing the K-lite executable, batch file etc in zip format, or get it via the Downloads page. Comments, feedback and suggestions welcome.

Comments

Popular posts from this blog

Using the Supervisor Controller Pattern to access View controls in MVVM

Getting started with client-server applications in C++

How to send an e-mail via Google SMTP using C#