Dienst ohne Benutzeranmeldung beenden
Hallo liebe Community,
folgendes Problem:
Ich habe eine Exe geschrieben, die über eine Batchdatei mittels Aufgabenplanung aufgerufen wird um eine Lexware-Datenbank zu sichern auf einem SBS 2012.
Um die DB zu sichern, muss der Lexware Dienst "Lexware-Datenbank" beendet werden.
Die Backup.exe enthält eine Aneinanderreihnung von xcopy-Befehlen mit try { } catch { } blöcken aber denke, dass ist uninteressant.
Die Aufgabe wurde so eingerichtet, dass sie unabhängig von der Benutzeranmeldung läuft und die Batch wird immer als Administrator ausgeführt.
Wenn ich als Administrator (über remote) angemeldet bin, funktioniert das Script. Wenn ich nicht über Remote verbunden bin, funktioniert das Script nicht.
Die Backup.exe Logt jedes mal den Fehler "Zugriff verweigert".
Ich habe testweise das Starten und Stoppen des Dienstes auch schon in die exe übernommen aber laut logg-Datei werden sie ordentlich beendet und wieder gestartet.
Hat jemand einen Idee, wo ich meinen Denkfehler / Problem habe? Bin so langsam ziemlich ratlos.
Mit freundlichen Grüßen
Martin Schweisel
folgendes Problem:
Ich habe eine Exe geschrieben, die über eine Batchdatei mittels Aufgabenplanung aufgerufen wird um eine Lexware-Datenbank zu sichern auf einem SBS 2012.
Um die DB zu sichern, muss der Lexware Dienst "Lexware-Datenbank" beendet werden.
NET STOP "Lexware_Datenbank"
Backup.exe
NET START"Lexware_Datenbank"
Die Backup.exe enthält eine Aneinanderreihnung von xcopy-Befehlen mit try { } catch { } blöcken aber denke, dass ist uninteressant.
Die Aufgabe wurde so eingerichtet, dass sie unabhängig von der Benutzeranmeldung läuft und die Batch wird immer als Administrator ausgeführt.
Wenn ich als Administrator (über remote) angemeldet bin, funktioniert das Script. Wenn ich nicht über Remote verbunden bin, funktioniert das Script nicht.
Die Backup.exe Logt jedes mal den Fehler "Zugriff verweigert".
Ich habe testweise das Starten und Stoppen des Dienstes auch schon in die exe übernommen aber laut logg-Datei werden sie ordentlich beendet und wieder gestartet.
Hat jemand einen Idee, wo ich meinen Denkfehler / Problem habe? Bin so langsam ziemlich ratlos.
Mit freundlichen Grüßen
Martin Schweisel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 305286
Url: https://administrator.de/contentid/305286
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
Wenn ich als Administrator (über remote) angemeldet bin, funktioniert das Script. Wenn ich nicht über Remote verbunden bin, funktioniert das Script nicht.
Das hört sich verdächtig nach Nutzung von Laufwerksbuchstaben anstatt UNC-Pfaden in deiner EXE an, wenn du in deiner EXE damit auf Netzlaufwerke kopierst.Laufwerke sind Sessionabhängig, d.h. wenn du einen Task hast der als Admin läuft hat er diese Laufwerke nicht zur Verfügung weil hier das Profil nicht geladen wird und eben auch keine Laufwerke gemappt werden, deshalb sollte man wenn möglich immer UNC-Pfade verwenden.
Wenn du dich stattdessen anmeldest und den Task startest, sind die Laufwerke ja gemappt und dein Skript läuft durch.
Das mal als Hypothese was bei dir schief gelaufen sein könnte.
Aber ohne deinen Code der EXE ist das alles nur pures Rumraten hier . Also, der Code ist sehr wohl von Belang.
Gruß skybird
Vorallem funktioniert die Exe ja ohne Probleme, wenn ich per Remote dabei zusehe und mit dem Administrator angemeldet bin.
Per Task wird das Profil nicht geladen das ist dein Problem beim Verwenden von Netzlaufwerken. Deswegen funktioniert es ja wenn du dich anmeldest, denn dann ist das Userprofil geladen Deswegen in Tasks besser immer mit UNC-Pfaden arbeiten.
Und Dienste per vb.net mit "net stop" beenden ?? Das geht dort nativ wesentlich zuverlässiger.
Der Code der Exe ist rund 800 Zeilen lang. Dazu die config-XML von rund 100 Zeilen. Ich denke das sprengt den Rahmen oder?
Dann liegt der Fehler zu 99% darin.Welcome Glaskugel ...
Womit kopierst du rekursiv? Mit xcopy ? Dann mach es stattdessen mal mit Robocopy und dem Schalter /B das ist zuverlässiger als xcopy. Es gibt auch Ordner bzw. Dateien die auch für einen Admin gesperrt sein können.
Ich würde hier lieber auch mit Schattenkopien arbeiten, erst Schattenkopie erstellen und diese dann wegsichern ...
Ich würde hier lieber auch mit Schattenkopien arbeiten, erst Schattenkopie erstellen und diese dann wegsichern ...
Dann ist mir klar warum ... Dabei muss man einiges beachten.
Ich würde den Task mit "System"-Rechten laufen lassen wenn du sowieso die Passwörter mit in die EXE packst, was man eigentlich immer vermeiden sollte.
Ich würde den Task mit "System"-Rechten laufen lassen wenn du sowieso die Passwörter mit in die EXE packst, was man eigentlich immer vermeiden sollte.
Wenn du die Rekursion selber machst dann lass dir doch mal das File protokollieren welches den "AccessDenied" Fehler wirft. Du hast ja hunderte Debugging-Möglichkeiten wenn du deinen Code selber schreibst!
Also mach keinen TryCatch um das ganze Konstrukt sondern um die einzelne Kopieraktion, und lass dir alle möglichen Infos in ein Log schreiben.
Dann wird sich der Grund schon finden.
Also mach keinen TryCatch um das ganze Konstrukt sondern um die einzelne Kopieraktion, und lass dir alle möglichen Infos in ein Log schreiben.
Dann wird sich der Grund schon finden.