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:
And click ‘Create’:
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:
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:
Verify that K-Lite is re-installed in Control Panel. For example:
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.