Avatar billede DonSkoD Juniormester
30. oktober 2019 - 10:48 Der er 7 kommentarer og
1 løsning

Fjern printerforbindelse

Hej

Jeg forsøger at lave et program der bl.a. skal fjerne en netværksprinter.
Jeg har følgende kode, men får en "Access denied" - findes der en smartere måde eller er der noget jeg mangler?

try
                {
                    //Fjerner nuværende printer
                    ConnectionOptions options = new ConnectionOptions();
                    options.EnablePrivileges = true;
                    ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath, options);
                    scope.Connect();
                    ManagementClass win32Printer = new ManagementClass("Win32_Printer");
                    ManagementObjectCollection printers = win32Printer.GetInstances();
                    foreach (ManagementObject printer in printers)
                    {
                        Console.WriteLine(printer.ToString());
                        if (printer.ToString().Contains("Follow_Me"))
                        {
                            Console.WriteLine("printer fundet:" + printer.ToString());
                            printer.Delete();
                        }
                    }
                } catch(Exception excp)
                {
                    Console.WriteLine(excp.Message);
                }
Avatar billede arne_v Ekspert
30. oktober 2019 - 19:20 #1
Faar du samme fejl hvis du bruger "Run as Administrator"?
Avatar billede DonSkoD Juniormester
31. oktober 2019 - 11:45 #2
Hmm umiddelbart ikke..
Hvis jeg kører programmet på min udviklermaskine kan jeg se i konsollen at den rigtig nok finder de printere der indeholder "Follow_Me".. men altså med "Access denied".

Hvis jeg så prøver at bygge programmet og flytte .exe-filen til en anden PC (med samme printere) så fjerner programmet dem ikke.. heller ikke når jeg kører som administrator. Findes der en måde at debugge (se konsol) når man kører programmet fra en anden PC?
Avatar billede DonSkoD Juniormester
31. oktober 2019 - 13:04 #3
Nu har jeg prøvet med en simplere kode som også fejler med "Access denied". Jeg har opsat en MessageBox som viser fejlen, for at kunne fejlsøge.

Jeg får "Access denied" både under "normal" afvikling og runas Administrator..

using (var printer = new ManagementObject($"Win32_Printer.DeviceID='\\\\print\\Follow_Me'"))
printer.Delete();
Avatar billede DonSkoD Juniormester
31. oktober 2019 - 13:06 #4
Jeg har en Java applikation som virker. Jeg forsøger at "konvertere" den til C#, så vi slipper for at have Java installeret.

Følgende virker på Java (uden at køre som administrator):
String fjernprinter = "rundll32 printui.dll,PrintUIEntry /q /dn /n \\\\print\\Follow_Me";
try {
Process p1 = Runtime.getRuntime().exec(fjernprinter);
p1.waitFor();
}
Avatar billede arne_v Ekspert
31. oktober 2019 - 15:15 #5
Hvorfor saa ikke bare bruge:

Process.Start("rundll32", @"printui.dll,PrintUIEntry /q /dn /n \\print\Follow_Me");

i C#?
Avatar billede DonSkoD Juniormester
01. november 2019 - 10:02 #6
Jeg tror problemet med access denied bunder ud i at det er en domæne-PC..
Jeg har compilet programmet med følgende kommando, som ser ud til at virke på en bærbar udenfor domænet:
System.Diagnostics.Process.Start("printui.exe", "/q /dn /n \\\\print\\Follow_Me").WaitForExit();
Avatar billede DonSkoD Juniormester
01. november 2019 - 13:34 #7
Findes der en måde at "hive en Exitcode" ud af denne kommando uden at den skal splittes i Process og StartInfo der hurtigt fylder adskillige linjer..?
Avatar billede arne_v Ekspert
01. november 2019 - 13:46 #8
Er der ikke en ExitCode property paa den Process som Start returnerer?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester