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
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.
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.