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.