Exemple #1
0
        public void AddDeletePrinterPort(string portName, string monitorName, bool deletePort = false)
        {
            IntPtr printerHandle;
            PrinterDefaults defaults = new PrinterDefaults { DesiredAccess = PrinterAccess.ServerAdmin };
            if (!OpenPrinter(",XcvMonitor " + monitorName, out printerHandle, ref defaults))
                throw new Exception("Could not open printer for the monitor port " + monitorName + "!");

            try
            {
                PortData portData = new PortData { sztPortName = portName };
                uint size = (uint)Marshal.SizeOf(portData);
                IntPtr pointer = Marshal.AllocHGlobal((int)size);
                Marshal.StructureToPtr(portData, pointer, true);
                IntPtr outputData;
                UInt32 outputNeeded, status;
                if (!XcvDataW(printerHandle, deletePort ? "DeletePort" : "AddPort", pointer, size, out outputData, 0, out outputNeeded, out status))
                    throw new Exception(status.ToString());
            }
            finally
            {
                ClosePrinter(printerHandle);
            }
        }
Exemple #2
0
 private static extern bool OpenPrinter(string printerName, out IntPtr phPrinter, ref PrinterDefaults printerDefaults);
Exemple #3
0
        public void RemoveVPrinter(string printerName)
        {
            var printerProps = PrinterProps.getProps(printerName);

            //for removal we try to go ahead even if there are some failures

            //5 - Configure Virtual Port
            removeVirtualPort(printerProps._monitorName, printerProps.portName);
            _logHelper.Log("removeVirtualPort Completed");

            //4 - Add Printer
            try
            {
                var printerDefaults = new PrinterDefaults
                {
                    DesiredAccess = PrinterAccess.PrinterAllAccess,  //0x000F000C,//PRINTER_ALL_ACCESS
                    pDataType = IntPtr.Zero,
                    pDevMode = IntPtr.Zero
                };
                IntPtr printerHandle;
                if (!OpenPrinter(printerName, out printerHandle, ref printerDefaults))
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                _logHelper.Log("OpenPrinter Completed");

                try
                {
                    if (!DeletePrinter(printerHandle))
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    _logHelper.Log("DeletePrinter Completed");
                }
                finally
                {
                    if (IntPtr.Zero != printerHandle)
                        ClosePrinter(printerHandle);
                }
            }
            catch (Exception ex)
            {
                _logHelper.Log("Failed to renove printer : " + ex.Message);
            }

            //3 - Add Printer Driver
            if (DeletePrinterDriver(null, null, printerProps.driverName) == 0)
            {
                var ex = new Win32Exception(Marshal.GetLastWin32Error());
                _logHelper.Log("ERROR in custom action AddDeletePrinterPort : " + ex.ToString());
                //
            }
            _logHelper.Log("DeletePrinterDriver Completed");

            //2 - Add Printer Port
            try
            {
                AddDeletePrinterPort(printerProps.portName, printerProps._monitorName, true);
                _logHelper.Log("AddDeletePrinterPort Completed");
            }
            catch (Exception ex)
            {
                _logHelper.Log("ERROR in custom action AddDeletePrinterPort : " + ex.ToString());
            }

            //1 - Add Printer Monitor
            RemovePrinterMonitor(printerProps._monitorName);
            _logHelper.Log("RemovePrinterMonitor Completed");

            //6 - Restart Spool Service
            _logHelper.Log("Restarting Spool Service");
            GenericResult restartSpoolResult = RestartSpoolService();
            if (restartSpoolResult.Success == false)
                throw restartSpoolResult.Exception;
        }
Exemple #4
0
 private static extern bool OpenPrinter(
     [MarshalAs(UnmanagedType.LPTStr)] string pPrinterName,
     out IntPtr phPrinter,
     ref PrinterDefaults pDefaults
     );
 private static extern bool OpenPrinter(string printerName, out IntPtr phPrinter, ref PrinterDefaults printerDefaults);
        public GenericResult AddPrinterPort(string portName, string portType)
        {
            GenericResult   retVal = new GenericResult("AddPrinterPort");
            IntPtr          printerHandle;
            PrinterDefaults defaults = new PrinterDefaults {
                DesiredAccess = PrinterAccess.ServerAdmin
            };

            try
            {
                if (!OpenPrinter(",XcvMonitor " + portType, out printerHandle, ref defaults))
                {
                    throw new Exception("Could not open printer for the monitor port " + portType + "!");
                }
                try
                {
                    PortData portData = new PortData {
                        sztPortName = portName
                    };
                    uint   size    = (uint)Marshal.SizeOf(portData);
                    IntPtr pointer = Marshal.AllocHGlobal((int)size);
                    Marshal.StructureToPtr(portData, pointer, true);
                    IntPtr outputData;
                    UInt32 outputNeeded, status;
                    try
                    {
                        if (!XcvDataW(printerHandle, "AddPort", pointer, size, out outputData, 0, out outputNeeded, out status))
                        {
                            retVal.Message = status.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        retVal.Exception = ex;
                        retVal.Message   = retVal.Exception.Message;
                    }
                    finally
                    {
                        Marshal.FreeHGlobal(pointer);
                    }
                }
                catch (Exception ex)
                {
                    retVal.Exception = ex;
                    retVal.Message   = retVal.Exception.Message;
                }

                finally
                {
                    ClosePrinter(printerHandle);
                }
            }
            catch (Exception ex)
            {
                retVal.Exception = ex;
                retVal.Message   = retVal.Exception.Message;
            }
            if (string.IsNullOrWhiteSpace(retVal.Message))
            {
                retVal.Success = true;
            }
            return(retVal);
        }