Batch datei öffnen und als Admin ausführen

jonasxxmoe

Mitglied
Hallihallo, ich öffne in meinem Java Programm eine Batch-Datei, welche die Druckerwarteschlange löscht. Dazu muss diese aber als Administrator ausgeführt werden, weiß jemand ob es dafür ein Parameter gibt? Oder eine andere Lösung?
Java:
try {
  Runtime.getRuntime().exec("cmd /c start C:\\Test\\Test\\printstop.bat");
} catch(Exception ex) {
  System.out.println(ex);
}
So rufe ich die Batchdatei zzT auf.
Danke im Voraus
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
So lange du Java nicht im Administratormodus ausführst, kannst du auch die Rechte innerhalb von Java nicht erhöhen (wäre ja auch grob fahrlässig).
 

jonasxxmoe

Mitglied
gibt es denn irgendeine andere möglichkeit? der druckauftrag sollte bei openoffice bzw. abgebrochen werden, ohne dass der andwender administrator sein muss oder das eine meldung kommt, welche das abfragt.
 

Flown

Administrator
Mitarbeiter
Äquivalentes Beispiel: Kannst du dich an deinem Computer als Administrator anmelden, ohne jemals das Passwort dafür einzugeben?

Also deine Frage ist sicherheitskritisch. Es gibt Mittel und Wege, wie man den Benutzer zu Administratoren erhebt, aber nicht ohne Passwort!
 

jonasxxmoe

Mitglied
Ich verstehe schon, ich habe mich gerade falsch ausgedrückt. Meine Frage war, ob es einen anderen Weg gäbe, die Druckerwarteschlange von Windows (oder direkt OpenOffice) zu löschen (eventuell gibt es ja eine Funktion in Java).
 

Flown

Administrator
Mitarbeiter
Also du startest deinen PrintJob in OpenOffice. Hast du irgendeinen Einfluss darauf, wie der PrintJob gestartet wird? Wenn du die Möglichkeit hast irgendwie daran zu kommen könnte ein CancelablePrintJob helfen. Sonst fällt mir jetzt nichts auf die Schnelle ein.
 

jonasxxmoe

Mitglied
Also Situationsbschreibung :D :
Ich schreibe eine Extension für OpenOffice (mit eigener Toolbar usw.), eine Funktion soll sein, dass der Benutzer (mit einem Makro) den Druckvorgang abbrechen kann. Hab es mit einer Batch-Datei gemacht (hat auch funktionier), jedoch muss man dafür Administratorrechte haben und das soll vermieden werden. Also muss ich an den Druckauftrag von OpenOffice kommen und diesen mit Java stoppen.
 

KeVoZ_

Aktives Mitglied
Hey @jonasxxmoe,
wenn du deine *.jar als Administrator ausführen möchtest, lässt du das ganz einfach deine Batch machen, indem du folgendes rein schreibst:
Code:
start %~dp0[DEIN PROGRAMM]
 

KeVoZ_

Aktives Mitglied
Dann entweder mit meinem Inhalt einfach mit Doppelklick starten, ODER einfach Rechtsklick auf die normale Batch und dann als Administrator starten ;)

-> dann wird deine Applikation, die du mit der Batch gestartet hast als Admin ausgeführt :)
 

Meniskusschaden

Top Contributor
Mich würde noch interessieren, was in der printstop.bat überhaupt für Befehle stehen. Falls es nur um den eigenen Printjob geht, hätte ich eigentlich erwartet, dass gar keine Admin-Rechte erforderlich sind. Wie identifizierst du den Printjob denn? Oder löschst du einfach die gesamte Queue? Das wäre ja etwas rabiat.;)

EDIT: Sehe gerade, dass oben bereits steht, dass die gesamte Queue gelöscht wird. War also ein überflüssiges Posting von mir.
 
Zuletzt bearbeitet:

Meniskusschaden

Top Contributor
Vielleicht funktioniert es mit der WMI-Kommandozeile besser. Da hat man die Möglichkeit, nach diversen Kriterien zu filtern. Man müsste es ja zumindest auf den eigenen Benutzernamen beschränken können. Dann richtet man nicht gleich ganz so viel Schaden an, falls sich mal Hunderte von Aufträgen gestaut haben, weil sich keiner die Mühe machen wollte, Papier nachzufüllen.;)
Mit folgender Zeile in der Batch-Datei, müssten beispielsweise alle Aufträge des Benutzers user gelöscht werden:
Code:
wmic printjob where owner='user' delete
 

jonasxxmoe

Mitglied
Also das berechtigen des Druckers ist nicht die Lösung, da es an allen möglichen Druckern funktionieren muss.
Am liebsten würde ich es gar nicht mit einer Batch datei machen, sondern mit einer Funktion aus Java um nur diesen speziellen Druckauftrag zu stoppen. Weiß jedoch wirklich nicht wie ich an diesen kommen soll..
 

Meniskusschaden

Top Contributor
Es würde mich schon interessieren, wie du zu löschen versuchst. Da es bisher um das Löschen der gesamten Queue ging, vermute ich, dass du einfach den Spooler-Dienst stoppen und danach die Aufträge auf Dateisystemebene löschen wolltest. Da wären natürlich ganz andere Rechte nötig.

Ich kenne leider auch keinen Weg, um die Druckaufträge mit Java zu löschen, aber falls du genug Informationen hast, kannst du meinen Vorschlag aus #17 vielleicht so anpassen, dass du das Dokument gezielt löschen kannst. Falls du nicht an die Job-ID kommst, wird die Kombination aus Druckername, Dokumentname und Benutzer für die Praxis meistens eindeutig genug sein. Die Infos hast du ja wahrscheinlich. Du könntest auch vorher mittels wmic die passenden Druckaufträge ermitteln und falls es mehr als einen gibt, einen Auswahldialog anbieten, in dem der Benutzer den Job selektiert.
 

thecain

Top Contributor
Du kannst ohne Admin rechte nicht Dinge machen die nur ein Admin kann. Wenn doch hättest du eine Lücke in windows gefunden.

Um den spooler service zu beenden sind auch admin rechte nötig + um im verzeichnis zu löschen auch.
 

Meniskusschaden

Top Contributor
wmic funktioniert nicht, bekomme jedes mal die Meldung "keine Instanzen verfügbar", obwohl ein Auftrag in der Warteschlange ist.
Also wenn wmic wirklich nicht funktioniert, hast du wahrscheinlich ein grundlegendes Problem und solltest vielleicht das Betriebssystem neu installieren.;)
Die Meldung "keine Instanzen verfügbar" erscheint normalerweise, wenn keine Aufträge zur Filterbedingung existieren. Also kann es doch eigentlich nur bedeuten, dass die Druckaufträge zu dem Zeitpunkt schon weg waren, dass die Filterbedingung fehlerhaft war oder dass du keine Rechte an deinen eigenen Druckaufträgen hast (was ungewöhnlich wäre). Oder sollen die Druckaufträge von einem Benutzer gelöscht werden, der sie nicht erstellt hat? Kannst du die Druckaufträge denn überhaupt ganz normal manuell aus der Druckwarteschlange löschen? Dann sollte es über WMI doch auch gehen (Bei mir tut es das übrigens auch). Was zeigt wmic denn an, wenn du es ohne Filterbedingung eingibst, also so: wmic printjob? Es müssen natürlich Druckaufträge existieren, also am besten die Druckwarteschlange vorher anhalten und eine Testseite erzeugen.
 

Neumi5694

Top Contributor
Ich würde einen Umweg wählen.
1. schreibe ein kleine Programm (entweder in Java oder was anderem, deine Entscheidung), welches eine Batch-Datei startet.
2. die .exe dieses Programms muss Admin-Rechte anfordern (kannst du für Java durch launch4J erreichen, wenn du das Manifest entsprechend gestaltest).
Ruf dann dieses Windows-Programm von deinem Java-Programm aus auf, es wird den User um Admin-Rechte fragen.

Aber ich denke, es muss gerade für Druckaufträge noch eine andere Möglichkeit geben ohne Admin-Rechte, sonst könnten die meisten User mit ihrem Rechner nicht viel anfangen.
 

Neumi5694

Top Contributor
Richtig, das ist nicht klar. Deswegen darf man die Frage auch nicht auf die Aufträge anderer beschränken, es geht nur um Aufträge allgemein.
 

JStein52

Top Contributor
Deswegen darf man die Frage auch nicht auf die Aufträge anderer beschränken
Er könnte uns auch sagen was er will. Und wenn er es allgemein will führt kein Weg daran vorbei dass er sich auf dem ein oder anderen Weg Admin-Rechte verschafft. Einer davon ist der den du beschrieben hast. Aber ich hatte das Gefühl er will sich um genau das rummogeln.
 

Meniskusschaden

Top Contributor
Er könnte natürlich auch einen unter Admin laufenden PrintJobDeletionServer programmieren, der Löschaufträge von PrintJobDeletionClients annimmt.;)
Falls es momentan wirklich daran scheitert, dass der User zwar Löschen soll, aber nicht die nötigen Rechte hat, sollte man die Rechte eben erteilen (müssen ja keine Admin-Rechte sein) oder die Anforderung ganz fallen lassen. Wie oben geschrieben vermute ich aber eher, dass er die nötigen Rechte zwar hat, aber "falsch" löscht, so dass er zusätzliche Rechte braucht.
Ich glaube nicht, dass er die Chance hat, mittels Java an den PrintJob zu kommen, um den Vorschlag von @Flown umzusetzen, es sei denn, er kann bereits bei der Erzeugung eine Referenz darauf speichern.
Deshalb würde ich zunächst mit den Standardfunktionen testen, ob die Rechte ausreichen. Außerdem würde ich mittels wmic einen Löschbefehl entwickeln, der wenigstens im simpelsten Szenario funktioniert (lokaler Drucker, Admin-Rechte, eigenes Dokument). Dann würde ich schrittweise testen, ob es mit fremden Dokumenten, normalen Usern und Netzwerkdruckern immer noch funktioniert. Danach klappt es entweder oder man weiß zumindest wo es hakt und kann entsprechend weiter nachfragen, wobei dann unter Umständen Windows-Administratoren bessere Ansprechpartner sind als Java-Programmierer.
 

jonasxxmoe

Mitglied
Entschuldigung für die späte Rückmeldung, ich war am Wochenende nicht zuhause.
Also um das klarzustellen: Ich kann keine Rechte verteilen (wie oben schon beschrieben), da es an allen möglichen Rechnern funktionieren muss, auf die ich keinen Zugriff habe.
Es sollen nur die eigenen Druckaufträge gelöscht werden und die Drucker können Lokal- oder Netzwerkdrucker sein.
 

jonasxxmoe

Mitglied
Per Hand: Befehl wird durchgeführt, Konsole schließt sich, Druckauftrag bleibt in der Warteschlange.
Aus dem Programm: Konsole öffnet sich, Befehl wird ausgeführt -> Fehlermeldung: Keine Instanzen verfügbar (wird in der Konsole angezeigt).
 

jonasxxmoe

Mitglied
Es funktionier jetzt soweit, jetzt sollen aber (wie beschrieben) nicht alle Druckaufträge, sondern nur die, des jeweiligen Nutzers gelöscht werden. Dieser muss in der WMIC jedoch angegeben werden aber ist ja immer ein anderer. Gibt es hierzu eine Lösung?
 

jonasxxmoe

Mitglied
Vielen Dank euch allen, es funktioniert. Man kann mit Java den Benutzernamen ganz einfach auslesen.


try {
String user= System.getProperty("user.name");
Runtime.getRuntime().exec("cmd /c start wmic printjob where owner='" + user + "' delete");
}
catch(Exception ex)
{
System.out.println(ex);
}
 

jonasxxmoe

Mitglied
Eine Frage hätte ich noch, ist es mit WMIC auch möglich nach Dokumentennamen zu überprüfen? Das würde die Sache um einiges eleganter machen. Nur müsste ich diesen irgendwie mit Java auslesen..
 

Meniskusschaden

Top Contributor
Der folgende Befehl listet die Dokumentnamen des aktuellen Benutzers auf:
Code:
wmic printjob where "owner='%USERNAME%'" get document
Man kann den Parameter document, wie jede Menge weiterer Parameter, auch in der where-Bedingung nutzen. and-Verknüpfungen und Abfragen mit like sind ebenfalls möglich. Man muß nur etwas die Syntax testen, bis es wirklich funktioniert.
Per Hand: Befehl wird durchgeführt, Konsole schließt sich, Druckauftrag bleibt in der Warteschlange.
Solche Tests würde ich lieber im bereits geöffneten Konsolenfenster starten, damit man die Ausgabe auch sieht (oder für die Testphase einen pause-Befehl an's Ende der Batch-Datei setzen).
Nur müsste ich diesen irgendwie mit Java auslesen.
Du könntest die Konsolenausgabe einlesen und weiter verarbeiten. Bin aber nicht sicher, ob das mit deiner aktuellen Aufrufmethode via "cmd /c" funktioniert. Falls nicht, kannst du dafür ja ProcessBuilder nutzen.
 

jonasxxmoe

Mitglied
Die Idee mit dem Auslesen ist im Prinzip nicht schlecht, aber dann weiß ich ja immer noch nicht für welches Dokument der Druckauftrag beendet werden soll (falls mehrere geöffnet sind).
Aber Vielen Dank schon mal für die Informationen über WMIC, jetzt brauch ich nur noch den Dokumentennamen.
 

Meniskusschaden

Top Contributor
Die Idee mit dem Auslesen ist im Prinzip nicht schlecht, aber dann weiß ich ja immer noch nicht für welches Dokument der Druckauftrag beendet werden soll (falls mehrere geöffnet sind).
Verstehe ich nicht ganz. Hast du nicht danach gefragt, wie du die Dokumentnamen auslesen kannst? Ansonsten stimmt der Dokumentname des Druckjobs doch sicher mit dem Dateinamen des OpenOffice-Dokumentes überein.
 

jonasxxmoe

Mitglied
Hab den Namen der Datei raus, aber die WMIC funktionier so nicht:
"cmd /c start wmic printjob where owner='" + user + "' and document='" + fileName + "' delete"
weiß jemand wieso? Wenn ich document="fileName" rausnehme, funktioniert es. o_O
Und der fileName ist auf jeden Fall richtig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J batch datei wird nicht aufgerufen Allgemeine Java-Themen 11
R Batch / Shell-Skript in Jar.Datei einbinden? Allgemeine Java-Themen 5
H java.library.path mit einer Batch-Datei einstellen Allgemeine Java-Themen 3
capgeti batch datei funktioniert nicht! Jar wird nicht gestartet! Allgemeine Java-Themen 3
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
D Batch-Datei Eingabe Allgemeine Java-Themen 2
M JAVA in BATCH Datei Allgemeine Java-Themen 9
F CP Problem Batch Datei Allgemeine Java-Themen 6
Developer_X Mit einer Batch Datei eine Java Datei starten Allgemeine Java-Themen 4
G batch- Datei ausführen Allgemeine Java-Themen 19
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
P Batch Datei erstellen Allgemeine Java-Themen 2
T Kommunikation mit batch datei Allgemeine Java-Themen 3
G Batch-Datei - javac Ausgaben anzeigen Allgemeine Java-Themen 5
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
F Programmaufruf durch Batch-Datei Allgemeine Java-Themen 9
F Batch Datei Allgemeine Java-Themen 3
D MS-Eingabeaufforderung/Batch Datei Allgemeine Java-Themen 5
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
Tobero Batch Vorgang zum output Allgemeine Java-Themen 3
I Javaaufruf aus Batch inkl. Parameter (Adminrechte) Allgemeine Java-Themen 2
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
M Compilieren auf der COnsole bzw batch Allgemeine Java-Themen 3
P Batch "Java minicompiler" Allgemeine Java-Themen 3
T Batch-File / keine Verbindung zur DerbyDB Allgemeine Java-Themen 3
H Batch in Java Allgemeine Java-Themen 8
M Batch ausführen mit Leerzeichen im Pfad Allgemeine Java-Themen 7
Developer_X Batch Programmierung Allgemeine Java-Themen 4
M Wie Java-Programm über Batch-file starten? Allgemeine Java-Themen 8
M Javaprozess mit Batch-Script synchronisieren Allgemeine Java-Themen 2
G Java und Batch Command Allgemeine Java-Themen 1
S Rückmeldung von Konsole(Batch) an Java Allgemeine Java-Themen 2
G Batch ohne Console? Allgemeine Java-Themen 6
R Erkennung der Java-Installation im Batch-File Allgemeine Java-Themen 2
C Java Batch Warte Problem Allgemeine Java-Themen 4
H java Programme als batch starten Allgemeine Java-Themen 13
M JavaDoc per Batch? Allgemeine Java-Themen 7
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Jar-Datei ausführen Allgemeine Java-Themen 7
C Outlook msg-Datei Anhänge extrahieren Allgemeine Java-Themen 2
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
G Datei senden via Xmodem an Serial-Port Allgemeine Java-Themen 35
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
N Txt Datei auslesen. Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben