Seite 1 von 1

[GELÖST] Paket mit absoluter Pfadanforderung.

Veröffentlicht: 9. Juni 2020 – 17:22 Uhr
von LMS
Hallo,

ich knüpfe an meinen ersten Beitrag an: viewtopic.php?f=9&t=2389 , in dem es um die Erstellung eines Druckers ging.

Das von sfonteneau vorgeschlagene Skript funktioniert. Es gibt jedoch keine Konfigurationsmöglichkeiten, und mein Treiber wählt standardmäßig ein unrealistisches Format (8,5 x 11 Zoll).

Ich wollte ihn daher konfigurieren, aber diese Einstellungen sind nicht leicht zu finden (oder ich bin einfach nicht gut im Suchen). Ich habe schließlich eine Lösung gefunden, indem ich eine Konfiguration exportiert und anschließend mit folgendem Befehl importiert habe:
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Ss /n "Schumann Kopierer 5. Stock" /a C:\A4-format.dat
- RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Sr /n "Schumann Kopierer 5. Stock" /a C:\A4-format.dat
Hinweis: Ich habe den Export natürlich nur einmal auf einem bereits konfigurierten Rechner durchgeführt, um die Basiskonfiguration zu erhalten. Anschließend habe ich versucht, den Import mit /Sr mithilfe des Pakets wapt zu reproduzieren.


Der Befehl funktioniert jedoch beim Import nur mit einem absoluten Pfad. Der folgende Test führt mich zu folgendem Schluss:
Wenn Ich befinde mich in der Eingabeaufforderung unter C:> und gebe die Option /a 'A4-format.dat' ein. Der Vorgang schlägt fehl und wird abgebrochen. Mit /a 'C:/A4-format.dat' funktioniert es hingegen, und die Formatänderung in den Druckereigenschaften ist sichtbar. Das Ergebnis ist unabhängig davon, ob die Eingabeaufforderung als Administrator ausgeführt wird oder nicht.

Meine Fragen:
- Habe ich etwas bei der Ausführung von printui.exe falsch verstanden? Gibt es eine Dokumentation, wie man die Druckereinstellungen direkt zuweist, anstatt eine Konfigurationsdatei zu verwenden?
- Falls ich es richtig verstanden habe, welche Lösung wäre empfehlenswert?
- Gibt es auf dem Client-Computer für jedes WAPT-Paket einen Ordner, auf den mit einem absoluten Pfad verwiesen werden könnte, der sich somit für jede Workstation nicht ändert?
- Sollten wir eine Netzwerkfreigabe zum Speichern der Quelldateien verwenden?
- Gibt es eine andere Lösung? (Ein Befehl zum Kopieren der .dat-Quelldatei auf die Client-Workstations verwenden, z. B. nach C:/source_wapt/fichier.dat, und anschließend den neuen absoluten Pfad festlegen, um eine allgemeine Konfiguration zu vermeiden?) Konfiguration, aber unter Verwendung eines allgemeinen Skripts.)

Betreff: Paket erfordert absoluten Pfad.

Veröffentlicht: 9. Juni 2020 - 21:44 Uhr
von dcardon
Das Paket wird in ein temporäres Verzeichnis mit einem zufälligen Namen entpackt. Den Pfad zu diesem Verzeichnis können Sie über die Variable `basedir` abrufen.

Betreff: Paket erfordert absoluten Pfad.

Veröffentlicht: 11. Juni 2020 - 11:06 Uhr
von LMS
Danke, die Variable basedir ist super.

Letztendlich scheint das jedoch nicht das Hauptproblem zu sein.

In meinem Skript, das ich für die Druckererstellung größtenteils von sfonteneau übernommen habe, sind dies die beiden aktiven Zeilen:

Der Drucker „Schumann Copier 5th floor“ wurde installiert. Funktioniert einwandfrei.
run(ur'rundll32 printui.dll,PrintUIEntry /if /b "%s" /f %s /r "IP_%s" /m "%s" ' % (nameprinter,path_driver,portprint,name_drivers))

- Soll die Druckereinstellungen aus der Datei „printer-format.dat“ in den Schumann-Kopierer/Drucker importieren. Funktioniert nicht mit PyScripter.
run(u'printui.exe /Sr /n "Schumann Kopierer 5. Stock" /a /f %s\printer-format.dat' %(basedir))
Ich habe also /f ausprobiert, was nichts änderte, und dann den vollständigen Pfad mit basedir hinzugefügt. Es änderte sich nichts.

Zur Erinnerung: Die direkte Verwendung der Eingabeaufforderung (CMD) mit denselben Dateien und Pfaden funktioniert problemlos. Oder besser gesagt: nicht ganz
Wenn ich das Paket erstelle und in mein lokales Repository hochlade, es anschließend modifiziere und einen Befehl für die Datei printer-format.dat ausführe, erhalte ich die Fehlermeldung „Vorgang konnte nicht abgeschlossen werden“ (beim Import). Nachdem ich die Datei exportiert und überschrieben habe, importiere ich sie erneut, und dann funktioniert es.

Ich vermute, das könnte mit einem Sicherheitsproblem in Windows zusammenhängen. Beim Erstellen meiner Pakete bin ich schon häufiger auf ähnliche Fehler gestoßen. Manchmal finde ich Workarounds, die eher wie Hacks wirken (z. B. mit Batch-Dateien oder PowerShell) als wie echte Lösungen.

Kurz gesagt, ich drehe mich im Kreis und verstehe die zurückgegebenen Fehlercodes nicht. Haben Sie Tipps, wie ich sie besser verstehen kann?
Zu Ihrer Information: Hier ist meine Installationsfunktion:

Code: Alle auswählen

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))
Hier ist der Fehlercode, der beim Ausführen des Befehls „install“ in PyScripter angezeigt wird:

Code: Alle auswählen

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
Da ich nicht weiß, welche Informationen für Sie wirklich wichtig sind, können Sie mir gerne Fragen stellen, falls nötig. Ich veröffentliche bereits viele Beiträge und möchte niemanden abschrecken, der meine Beiträge lesen möchte.

Betreff: Paket erfordert absoluten Pfad.

Veröffentlicht: 11. Juni 2020 – 13:43 Uhr
von Sfonteneau
für die Bestellung

Code: Alle auswählen

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a /f %s\printer-format.dat' %(basedir))
Vielleicht muss es im Benutzerkontext ausgeführt werden? Mit Sitzungseinrichtung

Betreff: Paket erfordert absoluten Pfad.

Veröffentlicht: 11. Juni 2020 – 15:59 Uhr
von LMS
Die Sitzungseinrichtung ist nützlich! Das zeigt mir nur, dass ich mir noch etwas genauer ansehen muss, was wapt alles für mich tun kann.

In diesem Fall bestand zwar ein Zusammenhang, aber kein direkter. Die ausführbare Datei `printui` setzt den Kontext direkt; wir können ihn mit Flags am Ende der importierten Konfigurationsdatei modifizieren. Hier ist also die neue Zeile, die im Benutzerkontext funktioniert und von "def install:" korrekt ausgeführt wird

Code: Alle auswählen

run(ur'printui.exe /Sr /n "Copieur schumann 5eme etage" /a %s\printer-format.dat u' %(basedir))
Und um noch einen Schritt weiterzugehen, stieß ich auf ein Problem: Mein Import würde keine formatierten Daten enthalten, da man Flags benötigt, um anzugeben, was exportiert werden soll. Daher muss man mit Folgendem exportieren:

Code: Alle auswählen

Rundll32.exe printui.dll,PrintUIEntry /Ss /n "Copieur Schumann 5eme etage" /a printer-format.dat c m u
Und importieren Sie mit:

Code: Alle auswählen

run(ur'Rundll32.exe printui.dll,PrintUIEntry /Sr /n "Copieur Schumann 5eme etage" /a %s\printer-format.dat c m p r u' %(basedir))
Wichtig ist, beim Export und Import das "u" zu verwenden, um denselben Kontext zu nutzen.

Hier ist das Thema, das mir geholfen hat:
https://stackoverflow.com/questions/173 ... ompleted-e

Betreff: Paket erfordert absoluten Pfad.

Veröffentlicht: 11. Juni 2020 – 16:16 Uhr
von Sfonteneau
Vielen Dank! Das war sehr hilfreich!

Betreff: [GELÖST] Paket erfordert absoluten Pfad.

Veröffentlicht: 12. Januar 2021 – 17:29 Uhr
von rmaurisso
Guten Morgen,
Vielen Dank für den Code zum Bereitstellen und Konfigurieren der Drucker.
Die Bereitstellung funktioniert einwandfrei, aber wenn ich in Pyscripter die Installation zum Testen starte, funktionieren die Druckereinstellungen nur für mein Domänenadministratorkonto (ads samba domain).
Wenn ich jedoch die folgende Befehlszeile manuell in der Benutzersitzung über cmd ausführe

Code: Alle auswählen

RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "Copieur Administratif Etage" /a C:\waptdev\tis-install-printer-Administratif_Etage-wapt\disk1\config-CAE.dat u
Die Konfiguration wird für meinen Benutzer korrekt angewendet.
Könnte ich eine Einstellung übersehen haben, die dazu führt, dass die Druckerbereitstellung funktioniert, aber nicht die Konfiguration für die Benutzer?
Vielen Dank für Ihr Feedback

Betreff: [GELÖST] Paket erfordert absoluten Pfad.

Veröffentlicht: 13. Januar 2021 - 11:25 Uhr
von rmaurisso
Funktioniert mit dem Benutzerkontext session_setup :D
. Super! :mrgreen: