2010-08-14 3 views
1

L'extrait de code ci-dessous utilise OPOS .NET pour ouvrir une imprimante POS pour l'impression. Cela fonctionne correctement lorsqu'il est exécuté dans le cadre d'une application autonome. Lorsqu'il est exécuté par un service Windows, l'appel à GetDevice (...) renvoie toujours null.OPOS PosExplorer.GetDevice() renvoie null lorsqu'il est exécuté dans Windows Service

explorer = new PosExplorer(); 
device_info = explorer.GetDevice(DeviceType.PosPrinter, PrinterName); 
printer = (PosPrinter)explorer.CreateInstance(device_info); 
printer.Open(); 
printer.Claim(1000); 
printer.DeviceEnabled = true; 

L'imprimante est une Epson TM-U220B. Existe-t-il un problème de sécurité à résoudre avant qu'un service ait accès aux terminaux de point de vente? Quelqu'un peut-il recommander une bonne source d'informations concernant le développement des services Windows qui utilisent OPOS .NET?

+0

Avez-vous résolu ce problème? J'ai un problème où Open() échoue lors de l'exécution dans ASP.NET pour un périphérique particulier indépendamment de l'utilisateur IIS (mais fonctionne bien pour tous les autres périphériques OPOS). –

+0

@Peter Beacom j'ai aussi fait face à un problème similaire. Mais le problème ne se produit pas pendant que j'utilise Visual Studio 2005 dans Windows 7 machine. Et cela fonctionne bien sur tous les IDE dans Windows XP. – TutuGeorge

+0

Ce problème a été résolu. Comme suggéré par Doobi, le problème n'était pas dans le code mais dans les paramètres de sécurité du poste de travail. –

Répondre

3

Ah OPOS, il a été un certain temps ...;)

Il semble que la sécurité. La façon de tester si c'est: 1. Exécutez le service sous un compte d'utilisateur que vous savez fonctionne à partir de l'application autonome 2. Vérifiez le paramètre dans la configuration du service qui lui permet d'interagir avec le bureau.

+0

Où et où pouvons-nous Vérifier le paramètre dans la configuration du service qui lui permet d'interagir avec le bureau? –

2

Votre code semble bon. Je vois le nom de la variable PrinterName. Cette variable doit contenir le nom logique attribué à l'imprimante. L'attribution du nom logique est une étape distincte qui peut être ignorée. Vous pouvez confirmer l'existence du nom logique à l'aide de POSDM disponible sur le point de vente du SDK .Net. Le chemin de commande serait

C: \ Program Files \ Microsoft Point de service \ POSDM listes nomliste

Si le périphérique et votre Nom logique ne puis que ne semblent pas expliquer votre situation actuelle.

Questions connexes