¿Cómo puedo instalar una impresora usando .NET?
Pregunta
Tengo un .INF para una impresora virtual que necesito instalar desde una aplicación .NET. He hecho esto antes de usar scripts por lotes, pero estoy buscando un fragmento de código para hacer esto en .NET Framework.
La impresora .INF no tiene nada de particular, por lo que cualquier código que instale una impresora desde un INF en C # o VB.NET funcionará.
Solución
Creo que esto es posible a través de la interoperabilidad con las API nativas de win32, pero he encontrado que es mucho más fácil usar un System.Diagnostics.Process () para llamar a printui.dll a través de:
rundll32.exe printui.dll, PrintUIEntry /?
Quizás ya lo esté utilizando en el script por lotes mencionado, pero si no, los parámetros se documentan aquí: Guía y referencia del usuario de PrintUI.DLL
Solo asegúrese de probarlo con todos los sistemas operativos que necesita admitir. Algunas opciones no existen en todas las versiones de Windows o han sido renombradas (aunque creo que son las opciones más esotéricas: la instalación de un archivo .INF probablemente funcionará en todos los ámbitos).
Otros consejos
Usted querrá mirar los objetos de WMI disponibles. Estos le brindan un mejor control de la configuración de la máquina local. Eche un vistazo a la Creador de código WMI de Microsoft, creo que esto generará un código de ejemplo que puede aprovechar para resolver su problema.
Administración de la configuración de la impresora en C # para impresión flexible
vea este artículo, utiliza un DLL de MS Platform SDK llamado PRNADMIN para administrar impresoras, controladores de impresora, puertos de impresora, ... etc.
Personalmente lo uso en un proyecto comercial para instalar un controlador de impresora y cambiar el puerto de la impresora al puerto local para interceptar el PostScript. y funciona como un encanto.
Alternativamente, puede usar algunos vbscripts preinstalados que vienen con Windows en C: \ Windows \ system32 \ Printing_Admin_Scripts y aquí hay un artículo para ellos:
Esta no es la solución ideal para no , pero si nadie más responde, puede crear un archivo por lotes temporal e invocarlo a través de C # / VB.NET.
Alguien más probablemente sabrá una forma más natural de hacer esto.
Deberá envolver las API de configuración con PINVOKE o un objeto COM nativo.
Siempre vuelvo a los siguientes enlaces para instalar las impresoras 'programáticamente'.