Oprettet man. d. 03. oktober 2011 kl. 15:10:40

kahs79
kahs79 (1.345 point. Point ude: 60)

Print til printer via ActiveX control

Hej
Jeg har udviklet en ActiveX kontrol, for at give brugere af et website muligheden for, at printe direkte til en Zebra label printer.

Jeg giver brugere muligheden for at printe til printeren via IP og port eller ved at indtaste en sti til en delt printer.

Via IP har vi ingen problemer.

Problemet opstår når vi forsøger at printe til en delt printer, men kun hvis klientens styresystem er Windows 7 (Vi har ikke testet på en Vista maskine). Der er ingen problemer med at fange printeren fra en XP maskine.

Koden ser således ud:

Byte[] data = System.Text.Encoding.GetEncoding(1252).GetBytes(Text);
SafeFileHandle printer = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
if (printer.IsInvalid == true)
{
    return "Could not connect to printer. Printer path:" + Path;
}

FileStream lpt1 = new FileStream(printer, FileAccess.ReadWrite);
lpt1.Write(data, 0, data.Length);

lpt1.Close();
return "OK";

Jeg håber at I kan hjælpe.
/Kristina

Skrevet man. d. 03. oktober 2011 kl. 16:55:45| #1

kgkg
kgkg (9.982 point)
Jeg kunne da forstille mig at det er noget AV software og/eller Firewall der går ind og blokere. Og når det er en ActiveX kontrol, så har Internet Explorer sikker også en finger på pulsen.

Hvad sker der hvis Firewall og AV software slås fra, kan der så udskrives.

Logges der nogen events i eventloggen, når printeren tilgås?

Skrevet tir. d. 04. oktober 2011 kl. 17:34:40| #2

kahs79
kahs79 (1.345 point)
Hej
Firewall er slået fra og der er ingenting i eventviewer.
Antivirus er ikke slået fra, men der er ikke noget at i dens log.

Kan det ikke være noget med rettigheder til at skrive til printer?
CreateFile(..

/Kristina

Skrevet ons. d. 05. oktober 2011 kl. 21:31:43| #3

kgkg
kgkg (9.982 point)
Hvad sker der hvis programmet som bruger din ActiveX komponent startes med Admin rettigheder.

Har du prøvet at slå UAC fra på win 7 PC'en. Bare for at se om det er den der laver et eller andet.

Hvordan er din share oprettet?

Se evt. artiklen her:

http://answers.microsoft.com/ (...)

Der er et lille udklip fra artiklen her:


I had a similar problem with Windows 7 on HP Pavilion Slimline trying to print to a shared printer (HP4250) connected via parallel port to a Windows XP machine.

I saw some posts about Vista having similar problems (see "Windows vista printing to shared windows xp machine") and copied their technique.
I added the printer as a local printer (not networked), then selected Create a New Port, and for Type Of Port, a selected Local Port from the drop down list.
Click next, then enter the network name (ie \\xpmachinename\printername ). This didn't work at first, but then I changed the printer sharing on the XP machine from Shared to Don't Share, and then back to Shared. Then the Windows 7 machine was able to recognise \\xpmachinename\printername and the rest of the configuration was straighforward - I was able to find the correct driver without having to download a driver from HP's website.

Skrevet tor. d. 06. oktober 2011 kl. 13:14:04| #4

kahs79
kahs79 (1.345 point)
Hej igen
Ja, jeg har forsøgt med at staret IE som administrator, men det løser det ikke.
Jeg har ikke forsøgt med at slå UAC fra, men det vil jeg da prøve.

Det er en maskine som står i Mexico, så jeg får først adgang til den senere i dag. Du skal nok høre fra mig om det løser det.

/Kristina

Skrevet tor. d. 06. oktober 2011 kl. 19:05:18| #5

kahs79
kahs79 (1.345 point)
UAC er slået fra, men stadig ingen forskel.

Min share er operret som følgende:
Højreklikket på printer og valgt Printer Properties. Fanen Delt og hak i Del denne printer.
Herefter er indtastet et printer share navn.

Jeg forsøger at fange printeren på printerstien \\computernavn\printersharenavn

Skrevet tor. d. 06. oktober 2011 kl. 20:21:00| #6

kgkg
kgkg (9.982 point)
Kan du pinge printerstien \\computernavn og \\computernavn\printersharenavn ?

Hvis ikke, så er det problemet.

Kan du tilgå printerstien hvis du erstatter \\computernavn med \\IP adresse?

Er NETBIOS over TCP/IP enabled?

Prøv lige at se denne artikel:

http://www.howtogeek.com/ (...)

og denne:

http://www.sevenforums.com/ (...)

Skrevet fre. d. 07. oktober 2011 kl. 09:36:08| #7

kahs79
kahs79 (1.345 point)
Nej jeg kan ikke pinge stien.
Jeg kan pinge computeren og jeg kan fange den delte printer fra en anden PC (XP maskine). Så delingen må være fin nok.

Jeg kan heller ikke fange printeren via ActiveX kontrollen, hvis jeg skrifter computernavn ud med IP adressen.
Printeren er koblet til den PC som jeg prøver at fange den på.

/Kristina

Skrevet fre. d. 07. oktober 2011 kl. 17:04:26| #8

kgkg
kgkg (9.982 point)
Kan du se printeren på din Windows 7 PC under Netværk og Internet | Vis computere og enheder på netværket (Network and internet | View network computers and devices)?

Prøv lige at gøre de ting som står i denne guide og kom med resultatet her.

http://helpdeskgeek.com/ (...)

Skrevet tir. d. 08. november 2011 kl. 13:58:54| #9

kahs79
kahs79 (1.345 point)
Jeg har fuld Share a Printer from XP to Windows 7 guiden og har ingen problemer med at dele printeren og se den fra andre maskiner.
Jeg kan end uden problemer printe fra en XP maskine til den delte printer på Windows 7 maskinen, så det er ikke delingen som er problemet.

Jeg tror problemet er at min ActiveX ikke kan se printer driver eller får lov til at forbinde til printeren via driveren..

/Kristina

Skrevet tir. d. 08. november 2011 kl. 14:27:07| #10

kahs79
kahs79 (1.345 point)
Marshal.GetHRForLastWin32Error() returnerer: -2147024894
og
Marshal.GetLastWin32Error()returnerer: 2

Hvis jeg kalder en printer som ikke findes får jeg følgende fejl:
Marshal.GetHRForLastWin32Error() returnerer: -2147024829
og
Marshal.GetLastWin32Error()returnerer: 67

..Hvis det skulle kunne hjælp..

/Kristina

Skrevet tir. d. 08. november 2011 kl. 17:02:42| #11

kgkg
kgkg (9.982 point)
Fejl 2 betyder The system cannot find the file specified.

Fejl 67 betyder The network name cannot be found. og den er jo forståelig nok.

I din linje:
SafeFileHandle printer = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

Hvad indeholder Path

Skrevet tir. d. 08. november 2011 kl. 19:59:38| #12

kahs79
kahs79 (1.345 point)
Den indeholder printer stien \\computernavn\delteprinternavn

Skrevet tir. d. 08. november 2011 kl. 22:01:08| #13

kgkg
kgkg (9.982 point)
Din ShareMode parameter (nr. 3) i CreateFile er 0.

Og det betyder: Prevents other processes from opening a file or device if they request delete, read, or write access

Hvad sker der hvis du ændre den til 2 (FILE_SHARE_WRITE)

Jeg er ved at løbe tør for ideer.

Skrevet ons. d. 09. november 2011 kl. 09:32:33| #14

kahs79
kahs79 (1.345 point)
Ingen forskel, desværre.

Skrevet ons. d. 09. november 2011 kl. 09:51:34| #15

kahs79
kahs79 (1.345 point)
Hmm..
Fandt lige denne her:
http://www.tech-archive.net/ (...)

Og hvis jeg ændre CreationDisposition fra OPEN_EXISTING til OPEN_ALWAYS så virker det.

Testet både i Windows XP og Windows 7

Koden kom til at se således ud:
SafeFileHandle printer = CreateFile(Path, GENERIC_WRITE, 2, IntPtr.Zero, OPEN_ALWAYS, 0, IntPtr.Zero);

Har ikke testet om ShareMode kan være 0, endnu.
Du får points for at have led mig i den rigtige retning :)
Smider du et svar?

/Kristina

Skrevet ons. d. 09. november 2011 kl. 19:46:23| #16

kgkg
kgkg (9.982 point)
Hermed et svar.

Glad for at høre at du fik det til at virke...

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Print fra Windows Service på Win2008

Oprettet den 24. maj 2012 kl. 11.17
jps6kb giver 200 point for svar | Giv et svar »

Udskrive en Breadcrumb (Jeg er her >>)

Oprettet den 18. maj 2012 kl. 12.04
Qbruger giver 200 point for svar | Giv et svar »

Hjælp til at lokalisere fejl i CMS (synkron.via) dll

Oprettet den 16. maj 2012 kl. 19.31
jokkejensen giver 200 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger