Install printerdrivers with WMI and VB.NET
This is an example of how you install printerdrivers with .NET and WMI (Windows Management Instrumentation). Most examples on the Internet shows how this can be done with vbscript, printui.dll and such…
A list of properties can be found at MSDN Win32_PrinterDriver
Other topics:
How to install printerports with WMI and VB.NET
How to create a printerqueu with .NET and WMI
Imports System.Management
Dim infPath as String = "c:\driver\printerdriver.inf"
Dim mp As ManagementPath = New ManagementPath("Win32_PrinterDriver")
Dim co As ConnectionOptions = New ConnectionOptions()
co.EnablePrivileges = True
Dim ms As ManagementScope = New ManagementScope("\\" + Environment.MachineName + "\root\cimv2", co)
Dim mcPrinterDriver As New ManagementClass(ms, mp, Nothing)
mcPrinterDriver.SetPropertyValue("Name", "drivername")
mcPrinterDriver.SetPropertyValue("SupportedPlatform", "Windows NT x86") ' x86-architecture
'mcPrinterDriver.SetPropertyValue("SupportedPlatform", "Windows x64") ' x64-architecture
mcPrinterDriver.SetPropertyValue("Version", 3)
mcPrinterDriver.SetPropertyValue("FilePath", System.IO.Path.GetDirectoryName(infPath))
mcPrinterDriver.SetPropertyValue("InfName", infPath)
Dim inParams As System.Management.ManagementBaseObject = Nothing
inParams = mcPrinterDriver.GetMethodParameters("AddPrinterDriver")
inParams("DriverInfo") = CType(mcPrinterDriver, System.Management.ManagementBaseObject)
Dim outParams As System.Management.ManagementBaseObject = mcPrinterDriver.InvokeMethod("AddPrinterDriver", inParams, Nothing)
Dim uiReturnValue As UInteger = System.Convert.ToUInt32(outParams.Properties("ReturnValue").Value)
I have tested this in Windows XP, Windows 7 and Windows 2008R2. Make sure your account has privileges to install drivers.
On Windows XP the drivers are installed physically to:
C:\WINNT\system32\spool\drivers
And in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments
4 Comments
How to create a printerqueu with .NET and WMI | Marcus Nyberg on januari 12th, 2010
[...] Other topics: How to install printerdrivers with wmi and VB.NET [...]
matthiti on januari 31st, 2012
Our users dont have rights to install drivers…can you elevate rights in your code? I tried doing driver installs and elevation through WMI, but it doesnt work, so I was hoping your code could do this.
marcus on februari 3rd, 2012
matthiti: I dont think it is possible to elevate rights in code. I had the exact same problem and solved it by making a Windows-service running as System that installs the drivers.

Install printerports with WMI and VB.NET | Marcus Nyberg on december 11th, 2009
[...] Other topics: How to install printerdrivers with wmi and VB.NET [...]