[RESOLU] Package avec nécessité de chemin absolu.

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
Verrouillé
LMS
Messages : 5
Enregistré le : 03 juin 2020 - 11:22

09 juin 2020 - 17:22

Bonjour,

Je fais suite à mon premier sujet : viewtopic.php?f=9&t=2389 , concernant la création d'une imprimante.

Le script proposé par sfonteneau fonctionne. Cependant il n'y a pas de config , et mon pilote, par défaut , choisi un format incroyable (8 1/2 11").

Je voulais donc configurer, mais ces réglages ne cours pas les rues (ou je ne suis pas doué pour chercher). J'ai quand même trouvé mon bonheur avec l'export puis l'import d'une config, avec la commande :
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Ss /n "Copieur schumann 5eme etage" /a C:\A4-format.dat
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Sr /n "Copieur schumann 5eme etage" /a C:\A4-format.dat
Edit: NB: Bien sûr, je ne réalise l'export qu'une fois, sur un poste déjà configuré, pour avoir la base de la conf souhaitée. C'est ensuite l'import, avec /Sr, que j'essaye de reproduire avec un package wapt.


Cependant, la commande ne marche, à l'import, que lorsque nous avons un chemin absolu. Le test ci-dessous me fait arriver à cette conclusion :
Lorsque sur mon cmd, je me trouves à c:> et je tape l'option /a 'A4-format.dat' , l'opération est en échec et arretée, mais avec /a 'C:/A4-format.dat' ça marche et en vérifiant dans les propriété de l'imprimante, le format a bien changé. Résultat identique que l'on ai lancé la fenêtre cmd en admin ou non.

Ma question est :
- Ai-je mal compris un truc dans l'exécution de printui.exe ? Auriez-vous des docs pour directement affecter les paramètres de l'imprimante, plutôt que d'être dépendant d'un fichier de conf ?
- Si j'ai bien compris, quelle solution préconiser ?
- Il existe un dossier sur l'ordinateur client, pour chaque package wapt, sur lequel il serait possible de pointer avec un chemin absolu qui ne changerait donc pas pour chaque poste ?
- Faudrait-il plutôt utiliser un partage réseau pour y mettre les sources ?
- Autre solution ? (utiliser une commande pour copier la source du .dat sur les postes clients, par exemple dans c:/source_wapt/fichier.dat, Puis, mettre le nouveau chemin absolu, et ainsi pas de config générale, mais un script général.)
Avatar du membre
dcardon
Expert WAPT
Messages : 1717
Enregistré le : 18 juin 2014 - 09:58
Localisation : Saint Sébastien sur Loire
Contact :

09 juin 2020 - 21:44

le paquet est dézippé dans un répertoire temporaire avec un nom random. Vous pouvez récupérer le chemin du répertoire où il est dézippé à travers la variable basedir.
Denis Cardon - Tranquil IT
Communiquez autour de vous sur WAPT! Envoyez nous vos url de blog et d'articles dans la catégorie votre avis du forum, nous les mettrons en avant sur le site WAPT
LMS
Messages : 5
Enregistré le : 03 juin 2020 - 11:22

11 juin 2020 - 11:06

Merci, top la variable basedir.

Cependant, finalement, ça ne semble pas être le problème principal.

Dans mon script, que j'ai grandement piqué à sfonteneau pour al création de l'imprimante, voici les deux lignes actives:

- Installe l'imprimante "Copieur schumann 5eme etage". Marche sans aucun soucis.
run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r "IP_%s" /m "%s" ' % (nameprinter,path_driver,portprint,name_drivers))

- Est censé importer les paramètres d'imprimante "printer-format.dat" dans l'imprimante copieur schumann. Ne marche pas depuis PyScripter.
run(u'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
J'ai donc essayé un /f qui n'a rien changé , et ajouté le chemin complet avec basedir. Rien ne change.

Pourtant pour rappel, aucun soucis en passant par le CMD directement, avec les même fichiers, les même chemins. Ou en vérité pas tout à fait :
- Lorsque je build le package et le pousse sur mon dépot local, puis cherche à le modifier, et alors exécute un cmd vers le printer-format.dat, ça me dit "impossible de terminer l'opération" (pour l'import). Du coup j'exporte pour écraser le fichier, et import à nouveau, et là ça marche.

J'ai comme l'impression que ce serait plus rapport à un problème de sécurité windows ? J'ai jusqu'à présent eu beaucoup d'erreur de ce genre en créant mes package. Desfois je trouves des workaround qui font plus penser à de la bidouille (passer par du batch, powershell ) qu'à un fix légit.

Bref je tournes en rond, et comprends rien aux code erreur retournés. D'ailleurs, auriez-vous des tips pour améliorer la comrpéhension de ces dernier ?
Voici à titre informatif ma fonction install :

Code : Tout sélectionner

def install():

    if iswin64():
        path_driver = r"IT5DSETWin_10110FR\Drivers\PCL6\Win_x64\KOAXTJ__.INF"
        name_drivers = "KONICA MINOLTA C287SeriesPCL"
    else:
        path_driver = r"IT5DSETWin_10110FR\Drivers\PCL6\Win_x86\KOAXTJ__.inf"
        name_drivers = "KONICA MINOLTA C287SeriesPCL"



    # Delete old printer
    run_notfatal('rundll32 printui.dll,PrintUIEntry /n "%s" /dl /q ' % nameprinter)

    # Create port lpr or raw
    createprinterport_raw(portprint)

    # use create lpr if needed
    #createprinterport_lpr(portprint,'qu')

    # Install printer and drivers
    run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r  "IP_%s" /m "%s" ' % (nameprinter,path_driver,portprint,name_drivers))

    run(u'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
Voici le code d'erreur quand j'exécute un "install" dans PyScripter:

Code : Tout sélectionner

2020-06-11 10:51:51,466 CRITICAL Fatal error in install script: CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output::
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\common.py", line 3800, in install_wapt
    exitstatus = setup.install()
  File "c:\waptdev\wapt_av-5thFloor-printer-wapt\setup.py", line 36, in install
    run(u'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
  File "C:\Program Files (x86)\wapt\common.py", line 3570, in run
    return ensure_unicode(setuphelpers.run(*arg,**args))
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 3863, in run
    raise CalledProcessErrorOutput(proc.returncode,cmd,''.join(output))
CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output:

FATAL ERROR : CalledProcessErrorOutput: Command 'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f c:\\waptdev\\wapt_av-5thFloor-printer-wapt\\printer-format.dat' returned non-zero exit status 1.
Output:
Exit code:  3
Ne sachatn pas quels informations peuvent vraiment être importante pour vous, n'hésitez pas à me relancer au besoin sur certains points. Je flood déjà beaucoup, j'aimerai pas repousser les gens qui auraient voulu me lire^^.
Avatar du membre
sfonteneau
Expert WAPT
Messages : 2084
Enregistré le : 10 juil. 2014 - 23:52
Contact :

11 juin 2020 - 13:43

pour la commande

Code : Tout sélectionner

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
Il faut peu être l'executer en context utilisateur ? avec le session-setup
LMS
Messages : 5
Enregistré le : 03 juin 2020 - 11:22

11 juin 2020 - 15:59

Utile le session-setup! comme quoi il va falloir que je vérifie un peu plus tout ce que wapt peut faire pour moi.

En l'occurence c'était en rapport mais pas directement ça. C'est l'exe printui qui fixe directement le contexte, on peut le modifier avec des flag à la fin du fichier de conf importé. Aussi voila la nouvelle ligne qui fonctionne en contexte utilisateur et qui s'exécute correctement depuis le "def install:"

Code : Tout sélectionner

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a %s\printer-format.dat u' %(basedir))
Et en vérité pour aller plus loin, j'allais avoir un soucis, à savoir que mon import n'allait rien contenir en format, car pareil il faut des flag pour préciser ce que l'on souhaite exporter lors de l'export. Du coup il faut exporter avec :

Code : Tout sélectionner

Rundll32.exe printui.dll,PrintUIEntry /Ss /n "Copieur Schumann 5eme etage" /a printer-format.dat c m u
Et importer avec :

Code : Tout sélectionner

run(ur'Rundll32.exe printui.dll,PrintUIEntry /Sr /n "Copieur Schumann 5eme etage" /a %s\printer-format.dat c m p r u' %(basedir))
Ce qui est important est d'exporter et d'importer avec le "u" pour utiliser le même contexte.

Voici le sujet qui m'a aidé:
https://stackoverflow.com/questions/173 ... ompleted-e
Avatar du membre
sfonteneau
Expert WAPT
Messages : 2084
Enregistré le : 10 juil. 2014 - 23:52
Contact :

11 juin 2020 - 16:16

Merci beaucoup ! très utile !
rmaurisso
Messages : 4
Enregistré le : 12 janv. 2021 - 17:12

12 janv. 2021 - 17:29

Bonjour,
Merci pour le code pour le déploiement et la configuration des imprimantes.
Le déploiement fonctionne bien mais dans Pyscripter lorsque je lance l'installation pour tester, le paramétrage de l'imprimante ne fonctionne que pour mon compte admin du domaine (domaine ads samba).
Par contre si je lance manuellement la ligne de commande suivante dans la session de l’utilisateur avec cmd

Code : Tout sélectionner

RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "Copieur Administratif Etage" /a C:\waptdev\tis-install-printer-Administratif_Etage-wapt\disk1\config-CAE.dat u
La configuration s'applique bien pour mon utilisateur.
Est ce que j'aurai loupé un paramètre qui fait que le déploiement de l'imprimante fonctionne mais pas la configuration pour les utilisateurs ?
Merci pour votre retour
rmaurisso
Messages : 4
Enregistré le : 12 janv. 2021 - 17:12

13 janv. 2021 - 11:25

Fonctionne avec le contexte utilisateur session_setup :D
Génial :mrgreen:
Verrouillé