can anyone give some information on packaging printer drivers as they append the data in the same OEM file.Using the normal packaging if the application is unistalled it will remove the file and all other drivers will also get uninstalled.

0 Comments   [ + ] Show Comments


Please log in to comment

Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.


Windows Installer, on its own, cannot install Device Drivers such as the printer driver you mention. That's beyond it's scope.


A device driver CAN be installed by a VB Script and Windows Installer does support imbedded VB Script in the form of a Custom Action. The documentation you'll need to accomplish your task will be found where MSI, VB Script & Custom Action meet. THIS DOCUMENT is a good starting point.

My one recomendation would be to insure that you have several VB custom actions to accomplish what needs to be done during each possible mode of MSI use, i.e. Install, Repair & Remove.
Answered 05/04/2005 by: VikingLoki
Second Degree Brown Belt

Please log in to comment
It is possible to install any driver by using RUNDLL32's API & Particularely to install printer driver we have to use RUNDLL32 along with PRINTUI.DLL.
Using the custom action we can install drivers. While using thissolution , there is no need to keep any driver intallation resources in the MSI.
Here is the list of parameters that we have to pass to the RUNDLL32 & PRINTUI.DLL so install any printer driver, Parameters will defer depending up on the different printer & model.

Command Line Printer Control in Windows 2000 / XP

Many, if not all, printer settings can be done from Windows 2000's command line using PRINTUI.DLL and RUNDLL32.EXE.
The list of functions on this page was generated using the following command in Windows 2000 (Professional):
More information is available at Microsoft's TechNet under Q189105.


RUNDLL32 PRINTUI.DLL,PrintUIEntry [options ] [ @commandfile ]

/a[file] binary file name
/b[name] base printer name
/c[name] unc machine name if the action is on a remote machine
/dl delete local printer
/dn delete network printer connection
/dd delete printer driver
/e display printing preferences
/f[file] either inf file or output file
/ga add per machine printer connections
/ge enum per machine printer connections
/gd delete per machine printer connections
/h[arch] driver architecture one of the following, Alpha ¦ Intel ¦ Mips ¦ PowerPC
/ia install printer driver using inf file
/id install printer driver using add printer driver wizard
/if install printer using inf file
/ii install printer using add printer wizard with an inf file
/il install printer using add printer wizard
/in add network printer connection
/j[provider] print provider name
/k print test page to specified printer, cannot be combined with command when installing a printer
/l[path] printer driver source path
/m[model] printer driver model name
/n[name] printer name
/o display printer queue view
/p display printer properties
/q quiet mode, do not display error messages
/r[port] port name
/s display server properties
/Ss Store printer settings into a file

/Sr Restore printer settings from a file
Store or restore printer settings option flags that must be placed at the end of command:
c Color Profile
d PrinterData
s Security descriptor
g Global DevMode
m Minimal settings
u User DevMode
r Resolve name conflicts
f Force name
p Resolve port
/u use the existing printer driver if it's already installed
/t[#] zero based index page to start on
/v[version] driver version one of the following, Windows 95 or 98 ¦ Windows NT 3.1 ¦ Windows NT 3.5 or 3.51 ¦ Windows NT 3.51 ¦ Windows NT 4.0 ¦ Windows NT 4.0 or 2000 ¦ Windows 2000
/w prompt the user for a driver if specified driver is not found in the inf
/y set printer as the default
/Xg get printer settings
/Xs set printer settings
/z do not auto share this printer
/Z share this printer, can only be used with the /if option
/? help this message
@[file] command line argument file

Run server properties:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /s /t1 /n\\machine

Run printer properties:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /p /n\\machine\printer

Run add printer wizard localy:

Run add printer wizard on \\machine:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /il /c\\machine

Run queue view:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /o /n\\machine\printer

Run inf install:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b "Test Printer" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52.3"

Run add printer wizard using inf:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ii /f %windir%\inf\ntprint.inf

Add per machine printer connection:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"

Delete per machine printer connection:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\machine /n\\machine\printer

Enumerate per machine printer connections:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ge /c\\machine

Add printer driver using inf:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /ia /c\\machine /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000" /f %windir%\inf\ntprint.inf

Remove printer driver:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /dd /c\\machine /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000"

Set printer as default:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "printer"

Set printer comment:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"

Set printer port:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer" PortName "port:"

Get printer settings:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xg /n "printer"

Get printer settings saving results in a file:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /f "results.txt" /Xg /n "printer"

Set printer settings command usage:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Xs /n "printer" ?

Store all printer settings into a file:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "printer" /a "file.dat"

Restore all printer settings from a file:
RUNDLL32 PRINTUI.DLL,PrintUI /Sr /n "printer" /a "file.dat"

Store printer information on level 2 into a file:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "printer" /a "file.dat" 2

Restore from a file printer security descriptor:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer" /a "file.dat" s

Restore from a file printer global devmode and printer data:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer" /a "file.dat" g d

Restore from a file minimum settings and resolve port name:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "printer" /a "file.dat" m p

Always try with this rather then installting the driver by keeping the resources in the MSI, as it will bring themachine in unstable state after the uninstalltion of the application , as it will also remove the resources, which are getting used commonly by different drivers.

Jimit Mehta
Answered 05/09/2005 by: jimehta
Senior Yellow Belt

Please log in to comment
Answer this question or Comment on this question for clarity