By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,289 Members | 1,351 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,289 IT Pros & Developers. It's quick & easy.

Enumerating Printer Drivers Help Please

P: n/a
Hi,

I need to be able to Enumerate through Printer Drivers, ports, printers
and so fourth. And even add printers, ports, and drivers and setup printers.

Sofar i can do all of the following except anything to do with drivers.

I have added a reference to the PRNADMIN.DLL from MS Windows 2003 Tool
Kit into my project to do all of the above, but when i try to enumerate
printers i received the following error....

The data area passed to a system call is too small.
System.Runtime.InteropServices.ComException (0x8007007A)

Any help please? My code is below. (Basically the same for enumerating
ports - at least that works, even the VB6.0 code given my MS in the
examples throughs the same error)

using PRNADMINLib;

public static bool AddPrinterDriver(string strServerName)
{
try
{
strServerName = "";
PrintMasterClass oPrinterMaster = new PrintMasterClass();
object oRefDriver = strServerName;
object oDrivers;
oDrivers = oPrinterMaster.get_Drivers(ref oRefDriver);
DriverCollection oDriverCollection = (DriverCollection)oDrivers;

foreach (Driver oDriver in oDriverCollection)
{
System.Windows.Forms.MessageBox.Show(oDriver.Monit orName);
System.Windows.Forms.MessageBox.Show(oDriver.Confi gFile);
System.Windows.Forms.MessageBox.Show(oDriver.DataF ile);
System.Windows.Forms.MessageBox.Show(oDriver.Drive rVersion);
System.Windows.Forms.MessageBox.Show(oDriver.Drive rArchitecture);
System.Windows.Forms.MessageBox.Show(oDriver.Envir onment);
System.Windows.Forms.MessageBox.Show(oDriver.HelpF ile);
System.Windows.Forms.MessageBox.Show(oDriver.InfFi le);
System.Windows.Forms.MessageBox.Show(oDriver.Model Name);
System.Windows.Forms.MessageBox.Show(oDriver.Path) ;
System.Windows.Forms.MessageBox.Show(oDriver.Serve rName);
System.Windows.Forms.MessageBox.Show(oDriver.Versi on.ToString());
}
return true;
}
catch (Exception err)
{
System.Windows.Forms.MessageBox.Show(err.Message.T oString() + " | " +
err.ToString() + "|" + err.Source.ToString());
return false;
}
}
Nov 17 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a

"Brett Mostert" <br**********@sebrio.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Hi,

I need to be able to Enumerate through Printer Drivers, ports, printers
and so fourth. And even add printers, ports, and drivers and setup
printers.

Sofar i can do all of the following except anything to do with drivers.

I have added a reference to the PRNADMIN.DLL from MS Windows 2003 Tool Kit
into my project to do all of the above, but when i try to enumerate
printers i received the following error....

The data area passed to a system call is too small.
System.Runtime.InteropServices.ComException (0x8007007A)

Any help please? My code is below. (Basically the same for enumerating
ports - at least that works, even the VB6.0 code given my MS in the
examples throughs the same error)

using PRNADMINLib;

public static bool AddPrinterDriver(string strServerName)
{
try
{
strServerName = "";
PrintMasterClass oPrinterMaster = new PrintMasterClass();
object oRefDriver = strServerName;
object oDrivers;
oDrivers = oPrinterMaster.get_Drivers(ref oRefDriver);
DriverCollection oDriverCollection = (DriverCollection)oDrivers;

foreach (Driver oDriver in oDriverCollection)
{
System.Windows.Forms.MessageBox.Show(oDriver.Monit orName);
System.Windows.Forms.MessageBox.Show(oDriver.Confi gFile);
System.Windows.Forms.MessageBox.Show(oDriver.DataF ile);
System.Windows.Forms.MessageBox.Show(oDriver.Drive rVersion);
System.Windows.Forms.MessageBox.Show(oDriver.Drive rArchitecture);
System.Windows.Forms.MessageBox.Show(oDriver.Envir onment);
System.Windows.Forms.MessageBox.Show(oDriver.HelpF ile);
System.Windows.Forms.MessageBox.Show(oDriver.InfFi le);
System.Windows.Forms.MessageBox.Show(oDriver.Model Name);
System.Windows.Forms.MessageBox.Show(oDriver.Path) ;
System.Windows.Forms.MessageBox.Show(oDriver.Serve rName);
System.Windows.Forms.MessageBox.Show(oDriver.Versi on.ToString());
}
return true;
}
catch (Exception err)
{
System.Windows.Forms.MessageBox.Show(err.Message.T oString() + " | " +
err.ToString() + "|" + err.Source.ToString());
return false;
}
}


IMO this COM server (prnadmin.dll) has not been designed(tested) to be used
from non-scripting languages (VBS or JS), everything else like VB.NET, C#
and C++ fails to set/get some properties.
Unless you need this to run on NT4, I would suggest you to use
System.Management and WMI for this.

Willy.
Nov 17 '05 #2

P: n/a
Willy Denoyette [MVP] wrote:
"Brett Mostert" <br**********@sebrio.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Hi,

I need to be able to Enumerate through Printer Drivers, ports, printers
and so fourth. And even add printers, ports, and drivers and setup
printers.

Sofar i can do all of the following except anything to do with drivers.

I have added a reference to the PRNADMIN.DLL from MS Windows 2003 Tool Kit
into my project to do all of the above, but when i try to enumerate
printers i received the following error....

The data area passed to a system call is too small.
System.Runtime.InteropServices.ComException (0x8007007A)

Any help please? My code is below. (Basically the same for enumerating
ports - at least that works, even the VB6.0 code given my MS in the
examples throughs the same error)

using PRNADMINLib;

public static bool AddPrinterDriver(string strServerName)
{
try
{
strServerName = "";
PrintMasterClass oPrinterMaster = new PrintMasterClass();
object oRefDriver = strServerName;
object oDrivers;
oDrivers = oPrinterMaster.get_Drivers(ref oRefDriver);
DriverCollection oDriverCollection = (DriverCollection)oDrivers;

foreach (Driver oDriver in oDriverCollection)
{
System.Windows.Forms.MessageBox.Show(oDriver.Mon itorName);
System.Windows.Forms.MessageBox.Show(oDriver.Con figFile);
System.Windows.Forms.MessageBox.Show(oDriver.Dat aFile);
System.Windows.Forms.MessageBox.Show(oDriver.Dri verVersion);
System.Windows.Forms.MessageBox.Show(oDriver.Dri verArchitecture);
System.Windows.Forms.MessageBox.Show(oDriver.Env ironment);
System.Windows.Forms.MessageBox.Show(oDriver.Hel pFile);
System.Windows.Forms.MessageBox.Show(oDriver.Inf File);
System.Windows.Forms.MessageBox.Show(oDriver.Mod elName);
System.Windows.Forms.MessageBox.Show(oDriver.Pat h);
System.Windows.Forms.MessageBox.Show(oDriver.Ser verName);
System.Windows.Forms.MessageBox.Show(oDriver.Ver sion.ToString());
}
return true;
}
catch (Exception err)
{
System.Windows.Forms.MessageBox.Show(err.Message .ToString() + " | " +
err.ToString() + "|" + err.Source.ToString());
return false;
}
}

IMO this COM server (prnadmin.dll) has not been designed(tested) to be used
from non-scripting languages (VBS or JS), everything else like VB.NET, C#
and C++ fails to set/get some properties.
Unless you need this to run on NT4, I would suggest you to use
System.Management and WMI for this.

Willy.

Hi, first of all thanx for the reply :), but i have tried using VBS
already, and it throws the same error, even the sample microsoft
provides in there .vbs file throws the same error?

Any thoughts?

Thanx
Brett
Nov 17 '05 #3

P: n/a

"Brett Mostert" <br**********@sebrio.com> wrote in message

Hi, first of all thanx for the reply :), but i have tried using VBS
already, and it throws the same error, even the sample microsoft provides
in there .vbs file throws the same error?

Any thoughts?

Thanx
Brett


This works for me on both W2K3 and XP, using prnadmin.dll version 5.2.3790.0
..

Dim oMaster
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
for each oDriver in oMaster.Drivers("")
wscript.echo "DriverName : " & oDriver.ModelName
next

Using any non-scripting language (C++, C#, VB.NET) to enum the drivers fail
with HRESULT 0x8007007A, other interfaces like Printer, Port and Form work
as expected.

Willy.


Nov 17 '05 #4

P: n/a
Willy Denoyette [MVP] wrote:
"Brett Mostert" <br**********@sebrio.com> wrote in message

Hi, first of all thanx for the reply :), but i have tried using VBS
already, and it throws the same error, even the sample microsoft provides
in there .vbs file throws the same error?

Any thoughts?

Thanx
Brett

This works for me on both W2K3 and XP, using prnadmin.dll version 5.2.3790.0
.

Dim oMaster
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
for each oDriver in oMaster.Drivers("")
wscript.echo "DriverName : " & oDriver.ModelName
next

Using any non-scripting language (C++, C#, VB.NET) to enum the drivers fail
with HRESULT 0x8007007A, other interfaces like Printer, Port and Form work
as expected.

Willy.

Hey, hmm yes your are right, is there away i could do this using C#?
I need to be able to add printer ports, drivers, printers and administer
them?

thanx
Brett
Nov 17 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.