Pagina 1 di 1

[RISOLTO] Pacchetto con requisito di percorso assoluto.

Pubblicato: 9 giugno 2020 - 17:22
di LMS
Ciao,

vi aggiorno sul mio primo post: viewtopic.php?f=9&t=2389 , riguardo alla creazione di una stampante.

Lo script suggerito da sfonteneau funziona. Tuttavia, non c'è alcuna configurazione e il mio driver, per impostazione predefinita, sceglie un formato incredibile (8,5 x 11").

Quindi volevo configurarlo, ma queste impostazioni non sono facilmente disponibili (o semplicemente non sono bravo a cercare). Sono riuscito a trovare una soluzione esportando e poi importando una configurazione usando il comando:
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Ss /n "Schumann copier 5th floor" /a C:\A4-format.dat
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Sr /n "Schumann copier 5th floor" /a C:\A4-format.dat
Modifica: Nota: Ovviamente, eseguo l'esportazione solo una volta, su una macchina già configurata, per ottenere la configurazione di base. Quindi provo a riprodurre l'importazione con /Sr usando un pacchetto wapt.


Tuttavia, il comando funziona solo durante l'importazione quando abbiamo un percorso assoluto. Il test seguente mi porta a questo Conclusione:
Quando sono nel mio prompt dei comandi in c:> e digito l'opzione /a 'A4-format.dat', l'operazione fallisce e si interrompe, ma con /a 'C:/A4-format.dat' funziona e, controllando le proprietà della stampante, il formato è effettivamente cambiato. Il risultato è lo stesso sia che la finestra del prompt dei comandi venga avviata come amministratore o meno.

La mia domanda è:
- Ho frainteso qualcosa nell'esecuzione di printui.exe? Avete della documentazione su come assegnare direttamente le impostazioni della stampante, invece di affidarsi a un file di configurazione?
- Se ho capito bene, quale soluzione dovrei consigliare?
- C'è una cartella sul computer client, per ogni pacchetto wapt, a cui si potrebbe puntare con un percorso assoluto che quindi non cambierebbe per ogni workstation?
- Dovremmo usare una condivisione di rete per archiviare i file sorgente?
- Un'altra soluzione? (Usare un comando per copiare il file sorgente .dat sulle workstation client, ad esempio in c:/source_wapt/fichier.dat, quindi impostare il nuovo percorso assoluto, così (evitando una configurazione generica, ma utilizzando uno script generico.)

Re: Pacchetto che richiede un percorso assoluto.

Pubblicato: 9 giugno 2020 - 21:44
di dcardon
Il pacchetto viene decompresso in una directory temporanea con un nome casuale. È possibile recuperare il percorso della directory in cui è stato decompresso utilizzando la variabile `basedir`.

Re: Pacchetto che richiede un percorso assoluto.

Pubblicato: 11 giugno 2020 - 11:06
di LMS
Grazie, la variabile basedir è fantastica.

Tuttavia, in definitiva, questo non sembra essere il problema principale.

Nel mio script, che ho preso in prestito in gran parte da sfonteneau per la creazione della stampante, ecco le due righe attive:

- Ho installato la stampante "Schumann Copier 5th floor". Funziona senza problemi.
run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r "IP_%s" /m "%s" ' % (nameprinter,path_driver,portprint,name_drivers))

- Dovrebbe importare le impostazioni di stampa "printer-format.dat" nella fotocopiatrice/stampante Schumann. Non funziona da PyScripter.
run(u'printui.exe /Sr /n "Fotocopiatrice Schumann 5° piano" /a /f %s\printer-format.dat' %(basedir))
Ho provato con /f, ma non è cambiato nulla, e ho aggiunto il percorso completo con basedir. Non è cambiato nulla.

Tuttavia, come promemoria, non ci sono problemi nell'usare CMD direttamente, con gli stessi file e gli stessi percorsi. O meglio, non proprio:
Quando compilo il pacchetto e lo carico nel mio repository locale, poi provo a modificarlo ed eseguo un comando sul file printer-format.dat, mi dice "Impossibile completare l'operazione" (per l'importazione). Quindi esporto per sovrascrivere il file e lo importo di nuovo, e funziona.

Ho la sensazione che questo possa essere correlato a un problema di sicurezza di Windows. Ho riscontrato molti errori di questo tipo durante la creazione dei miei pacchetti. A volte trovo soluzioni alternative che sembrano più hack (utilizzando file batch o PowerShell) che soluzioni legittime.

In breve, sto girando in tondo e non capisco i codici di errore che vengono restituiti. Hai qualche suggerimento per migliorarne la comprensione?
Per vostra informazione, ecco la mia funzione di installazione:

Codice: Seleziona tutto

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))
Ecco il codice di errore quando eseguo un comando "install" in PyScripter:

Codice: Seleziona tutto

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
Se non sai quali informazioni potrebbero essere davvero importanti per te, sentiti libero di farmi domande se necessario. Pubblico già molto e non vorrei scoraggiare chi potrebbe essere interessato a leggere i miei post.

Re: Pacchetto che richiede un percorso assoluto.

Pubblicato: 11 giugno 2020 - 13:43
di sfontenau
per l'ordine

Codice: Seleziona tutto

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
Forse deve essere eseguito nel contesto utente? con session-setup

Re: Pacchetto che richiede un percorso assoluto.

Pubblicato: 11 giugno 2020 - 15:59
di LMS
La configurazione della sessione è utile! Dimostra solo che dovrò provare un po' di più tutto ciò che wapt può fare per me.

In questo caso, era correlato, ma non direttamente. È l'eseguibile printui che imposta direttamente il contesto; possiamo modificarlo con i flag alla fine del file di configurazione importato. Ecco la nuova riga che funziona nel contesto utente ed è eseguita correttamente da "def install":

Codice: Seleziona tutto

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a %s\printer-format.dat u' %(basedir))
E in realtà, per andare oltre, stavo per imbattermi in un problema: la mia importazione non conterrebbe dati formattati, perché sono necessari dei flag per specificare cosa si desidera esportare. Quindi bisogna esportare con:

Codice: Seleziona tutto

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

Codice: Seleziona tutto

run(ur'Rundll32.exe printui.dll,PrintUIEntry /Sr /n "Copieur Schumann 5eme etage" /a %s\printer-format.dat c m p r u' %(basedir))
Ciò che conta è esportare e importare con la "u" per utilizzare lo stesso contesto.

Ecco l'argomento che mi è stato utile:
https://stackoverflow.com/questions/173 ... ompleted-e

Re: Pacchetto che richiede un percorso assoluto.

Pubblicato: 11 giugno 2020 - 16:16
di sfontenau
Grazie mille! Molto utile!

Re: [RISOLTO] Pacchetto che richiede percorso assoluto.

Pubblicato: 12 gennaio 2021 - 17:29
di rmaurisso
Buongiorno,
Grazie per il codice per la distribuzione e la configurazione delle stampanti.
La distribuzione funziona correttamente, ma quando avvio l'installazione in Pyscripter per testarla, le impostazioni della stampante funzionano solo per il mio account di amministratore di dominio (dominio ads samba).
Tuttavia, se eseguo manualmente la seguente riga di comando nella sessione dell'utente utilizzando cmd

Codice: Seleziona tutto

RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "Copieur Administratif Etage" /a C:\waptdev\tis-install-printer-Administratif_Etage-wapt\disk1\config-CAE.dat u
La configurazione si applica correttamente al mio utente.
Forse mi è sfuggita un'impostazione che fa funzionare la distribuzione della stampante ma non la configurazione per gli utenti?
Grazie per il tuo feedback

Re: [RISOLTO] Pacchetto che richiede percorso assoluto.

Pubblicato: 13 gennaio 2021 - 11:25
di rmaurisso
Funziona con il contesto utente session_setup :D
. Fantastico! :mrgreen: