Unable to install printer
-
I Updated Fog to 1.5.9. The problem is still the same.
How Fog client checks if a printer is already installed ?
-
@tatanas said in Unable to install printer:
How Fog client checks if a printer is already installed ?
Check out this part of the fog-client code: https://github.com/FOGProject/fog-client/blob/85da019cbd8a939e69fea42779f1bc53b06323cb/Modules/PrinterManager/PrinterManager.cs#L81
-
@tatanas Hi, it looks like same problem I’m facing since few month too, no workaround for now…
https://forums.fogproject.org/topic/15185/problem-mapping-network-printer-after-upgrade-to-1-5-9-60?_=1631803438100
Matthieu -
@sebastian-roth
Don’t hesitate if you need help debugging.
I’m using the module a lot and this bug is very frustating…@Matthieu-Jacquart
The bug was there in 1.5.8 too and I think it wasn’t before. -
So it seems the list “_configuredPrinters” contains the printer that I want to install.
Is it the host’s printers list configured through the fog server web ?
And the “installedPrinters” list will be the printers already installed on the host ? -
I can understand “…already exists” but what does “… already configured” mean ?
Here is a sample of the log when I try to install a printer which is not already installed on the host :
22/09/2021 15:58 PrinterManager Adding printers 22/09/2021 15:58 Printer Adding: B503-LASER (fog) 22/09/2021 15:59 PrinterManager PrintUI return code = 0 22/09/2021 15:59 PrinterManager Restarting spooler ... 22/09/2021 16:02 PrinterManager Adding printers 22/09/2021 16:02 PrinterManager B503-LASER (fog) has already been configured ... 22/09/2021 16:04 PrinterManager Adding printers 22/09/2021 16:04 PrinterManager B503-LASER (fog) has already been configured
I you want, I can give you a remote access to this computer.
-
More details :
I tried adding 2 Fog managed printers and the ports are created (IP_X.X.X.X with the associated IP) but not the printers.
I would say the printui method (even if return code is 0) is not working properly. -
@tatanas Finally I found some time to look into this in more depth. Most of the fog-client code came from Joe who is not actively working on this project anymore. While I try to fix things in the fog-client as much as I can I don’t know it well.
As far as I understand things the problem might occour because
_configuredPrinters
is an internal list the fog-client keeps to know which printer was configured earlier already to skip that on the next loop. But obviously a situation can arise where the rundll32 PrintUI calls return but still the printer is not setup correctly. In that case the fog-client code add it to its internal list of_configuredPrinters
and won’t try to configure it until you restart the fog-client service (FOGService
in Windows service managment).So what we need to find out is why this part is not working as it should: https://github.com/FOGProject/fog-client/blob/master/Modules/PrinterManager/Windows/WindowsPrinterManager.cs#L124
-
@sebastian-roth We need detailed log of printui command result.
The command in the client code is the same I have used to test from command line (test was ok), so it’s strange it doesn’t work. -
@tatanas Maybe there is some message in the Windows event log? Just a quick idea from the top of my head. I will try to find some time to help you on getting fog-client compiled soon as well.
-
@sebastian-roth I checked Windows event log (spooler log) and didn’t find anything regarding the printer installation.
Thanks for your time. -
Ok, thanks to you I can build the Fog Client (https://forums.fogproject.org/topic/15757/fog-client-build).
I would like to log the result of the printui command in WindowsPrinterManager.cs at line 41.
I added “> c:\printui.log” but it doesn’t work.using (var proc = Process.Start("rundll32.exe", $" printui.dll,PrintUIEntry {cmdLine} > c:\\printui.log"))
I don’t know C# so I suppose I could use a method to get Standard Output ?
-
@tatanas This answer on stackoverflow looks promising: https://stackoverflow.com/a/18529868
-
@sebastian-roth Here are the changes I made in the WindowsPrinterManager.cs at line 41:
using (Process proc = new Process()) { proc.StartInfo.FileName = "rundll32.exe"; proc.StartInfo.Arguments = $" printui.dll,PrintUIEntry {cmdLine}"; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.UseShellExecute = false; proc.Start(); var output = proc.StandardOutput.ReadToEnd(); proc.WaitForExit(30*1000); if (proc.HasExited) { Log.Entry(LogName, "PrintUI return code = " + proc.ExitCode); Log.Entry(LogName, "PrintUI Output = " + output); } else { Log.Entry(LogName, "PrintUI has not finished in a timely fashion, abandoning process"); } }
replacing
using (var proc = Process.Start("rundll32.exe", $" printui.dll,PrintUIEntry {cmdLine}")) { ... }
Unfortunatly, printui does not return anything…
Logging the “cmdLine” variable returns this when the first installation attempts:
cmdLine = /if /b "B503-LASER (fog)" /f "\\@IP_NAS\applications\Imprimantes\HP_LJ_M401\hpcm401u.inf" /r "IP_X.X.X.X" /m "HP LaserJet 400 M401 PCL 6" /q
After that, cmdLine is not used anymore and we’ve got “already configured”.
I never pass in the procedurepublic override void Configure(Printer printer, bool verbose = false) { ... }
-
I made some tests. The same printui command in local works fine.
So if it’s working in local it should works with fog client which means the added printer is removed/deleted from the host as soon as it’s installed ? It could explain why we can’t see the printer in the host list and why fog client says it’s already configured. -
Last news :
- The script never goes in the “Remove” method, so my last suggestion is wrong.
- I made a mistake about the “Configure” method. It is going into this method but it passes into
if (string.IsNullOrEmpty(printer.ConfigFile)) return;
and never execute
PrintUI($"/Sr /n \"{printer.Name}\" /a \"{printer.ConfigFile}\" m f g p", verbose);
EDIT : it is the same behaviour on a computer without problem… I’m lost
-
@tatanas said in Unable to install printer:
I never pass in the procedure
public override void Configure(Printer printer, bool verbose = false)Can you please explain what you mean by that?
-
@sebastian-roth Sorry I made a mistake, like I said in my previous post, the “Configure” method is called but does nothing (always enter the second “if”).
-
This problem is very strange.
I was testing on a win7 computer which can’t install printers (fog client 0.12).
I push a old fog image on it and with the same 0.12 client, it now works.
It is not really up to date and the problem appears on win10 too (different version). -
@tatanas Maybe the changes that came when MS fixed the printer nightmare issue is causing the problem.