我有一个安装打印机驱动程序的可执行文件,然后使用所述驱动程序创建打印机。我使用从 server 2003 资源工具包中生成的 tlbimp 托管版本的 prnadmin。
在 Windows XP 上,我必须将打印处理器设置为 MS_XPS。默认处理器是 WINPRINT。这个片段就是这样做的。
static string winxpPrinterProcessor = "MS_XPS";
if (isWinXP() && pPrinter.PrintProcessor != winxpPrinterProcessor)
{
Console.WriteLine("Oh No, the printer exists, but the processor isn't XPS. Setting now. It's currently " + pPrinter.PrintProcessor);
pPrinter.PrintProcessor = winxpPrinterProcessor;
Console.WriteLine("Set the processor to " + winxpPrinterProcessor);
if (updateOnly)
{
pMaster.PrinterSet(pPrinter);
} else { //else we're adding
pMaster.PrinterAdd(pPrinter);
}
当我自己运行程序时,通过双击,它可以完美运行。当它作为 MSI 自定义操作运行时,它不起作用。一切正常(安装打印机、驱动程序、设置端口)但设置打印处理器。Windows 只是忽略处理器设置。
MSI 以 SYSTEM 用户身份启动自定义操作(它是一个控制台应用程序)进程。当我手动启动它时,它在我的域管理员帐户下运行。
我还应该注意手动安装打印机也可以正常工作,因为 xp 从 INF 文件中获取处理器。使用 prnadmin dll 时它会忽略该设置。
我度过了一个非常令人沮丧的早晨。有什么想法吗?或者更好的方法来安装打印机?