Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batchausführung als System bricht ab - Win2k8 Server

Frage Entwicklung Batch & Shell

Mitglied: eccos01

eccos01 (Level 1) - Jetzt verbinden

12.08.2011, aktualisiert 12:57 Uhr, 4168 Aufrufe, 7 Kommentare

Hallo,

ich habe eine Batchdatei, die etliche Aktionen ausführt. Eine der Aktionen ist der Aufruf eines Hilfsprogramms eines DB-Herstellers um die DSN-Einträge auszulesen bzw. zu modifizieren.
Das Kommando liesst im ersten Schritt nur die DSN-Einträge und wertet dann mittels findstr aus, ob ein bestimmter Eintrag existiert.

Bisher gab es mit dem Skript keine Probleme... schon zig Kunden (auch mit Win2k8 64bit) arbeiten problemlos damit.

Bei dem einen Kunden läuft das Skript und das Hilfsprogramm auch völlig problemlos, wenn ich es als Benutzer mit Administrationsrechten ausführe.
Wird es aber - so wie es immer genutzt wird - aus einem Java-programm aufgerufen, welches als Dienst ausgeführt wird - gibt es Probleme.
Das heißt... sobald das Skript mit dem User "System" ausgeführt wird, wird die gesamte Skriptausführung sofort beim Aufruf des Hilfsprogramms ohne irgendwelche Ausgaben / Meldungen abgebrochen.

So einfach Dinge wie die Sicherheitseinstellungen der betroffenen Dateien (also Dateieigenschaften) habe ich schon kontrolliert. Alle verwendeten Umgebungsvariablen sind System-Variablen.

Jemand noch eine Idee?
Mitglied: mischn1980
12.08.2011 um 13:05 Uhr
Hi,

hab das gleiche Problem. Bei der Suche nach einer Lösung habe ich folgendes gefunden.

Beim Erstellen muss man in das Feld "Programm/Script:" C:\Windows\SysWOW64\cmd.exe reinschreiben und dann in das Feld "Argumente (optional):"/c" und die die Batchdatei mit dem Pfad.
Beispiel:
/c"c:\Programme\Batch\backup.bat"


Hier mal noch der Link

Pobiert habe ich die Lösung noch nicht aber vielleicht hilft es dir ja.

Gruss

Michael
Bitte warten ..
Mitglied: eccos01
12.08.2011 um 13:24 Uhr
Zitat von mischn1980:
Hi,

hab das gleiche Problem. Bei der Suche nach einer Lösung habe ich folgendes gefunden.

Beim Erstellen muss man in das Feld "Programm/Script:" C:\Windows\SysWOW64\cmd.exe reinschreiben und dann in das Feld
"Argumente (optional):"/c" und die die Batchdatei mit dem Pfad.
Beispiel:
/c"c:\Programme\Batch\backup.bat"


Hier mal noch der Link

Pobiert habe ich die Lösung noch nicht aber vielleicht hilft es dir ja.

Gruss

Michael


Hallo Micha,

erstens wüßte ich nicht, wie ich beim Aufruf aus JAVA das berücksichtigen kann... und innerhalb des Batch-Skriptes... beim Aufruf von dbdsn.exe (Aufruf erfolg mit Pfad-Angabe) ... seh ich nicht ganz den Sinn.
Meines Wissens wird eine EXE-Datei nicht mit vorangestelltem CMD aufgerufen, oder?

Hier der relevante Auszug aus der Batch-Datei:
01.
if /I NOT "%ASANYBIN%."=="%ASANY32BIN%." ( 
02.
   "%ASANY32BIN%\dbdsn.exe" -ls | FINDSTR /I /c:"myapp_32bit" > NUL 
03.
  IF ERRORLEVEL 1 ( 
04.
      "%ASANY32BIN%\dbdsn.exe" -y -ws myapp_32bit -c "eng=myapp;LINKS=TCPIP;Description=MyApp - 32bit" >> NUL 2>> NUL 
05.
   )    
06.
)
(Wie gesagt... die Umgebnungsvariablen sind gesetzt... das wurde auch nochmal mit Hilfsausgaben überprüft)
Bitte warten ..
Mitglied: Outface
12.08.2011 um 13:56 Uhr
Hallo,

als Erstes schaust Du Dir vielleicht erstmal die Ausgaben der einzelnen Kommandos an:

Hier ein Beispiel, wie Du eine Log-Datei erzeugen kannst:

01.
ECHO %date% %time% > "%~dpn0.log" 
02.
ECHO ASANYBIN: %ASANYBIN% >> "%~dpn0.log" 
03.
ECHO ASANY32BIN: %ASANY32BIN% >> "%~dpn0.log" 
04.
if /I NOT "%ASANYBIN%."=="%ASANY32BIN%." ( 
05.
   "%ASANY32BIN%\dbdsn.exe" -ls >> "%~dpn0.log" 
06.
   "%ASANY32BIN%\dbdsn.exe" -ls | FINDSTR /I /c:"myapp_32bit" >> "%~dpn0.log" 
07.
  ECHO ERRORLEVEL: %ERRORLEVEL% >> "%~dpn0.log" 
08.
  IF ERRORLEVEL 1 ( 
09.
      "%ASANY32BIN%\dbdsn.exe" -y -ws myapp_32bit -c "eng=myapp;LINKS=TCPIP;Description=MyApp - 32bit" >> "%~dpn0.log" 2>> "%~dpn0.log" 
10.
   )    
11.
12.
ECHO *-------------- >> "%~dpn0.log"
1. Es ist nicht immer gut, alles in's NUL-Nirwana zu senden, was Aufschluss über den Verlauf geben könnte.

2. Und was soll in dem Fall passieren, wenn "%ASANYBIN%." == "%ASANY32BIN%." ???

Die Log-Datei entsteht im Verzeichnis der Cmd-Datei. Poste die Log-Datei hier. Vielleicht steht ja ein Hinweis auf das Problem darin.

Ein möglicher Grund wäre z.B., daß der Benutzer "System" schlicht keinen Zugriff auf den DB-Server hat, bei der Erzeugung des DSN das Programm dbdsn.exe aber eine funktionierende Verbindung aufzubauen versucht... aber das ist lediglich eine Mutmaßung von mir.

Outface
Bitte warten ..
Mitglied: eccos01
12.08.2011 um 14:11 Uhr
Zitat von Outface:
Hallo,

als Erstes schaust Du Dir vielleicht erstmal die Ausgaben der einzelnen Kommandos an:

Hier ein Beispiel, wie Du eine Log-Datei erzeugen kannst:

01.
> ECHO %date% %time% > "%~dpn0.log" 
02.
> ECHO ASANYBIN: %ASANYBIN% >> "%~dpn0.log" 
03.
> ECHO ASANY32BIN: %ASANY32BIN% >> "%~dpn0.log" 
04.
> if /I NOT "%ASANYBIN%."=="%ASANY32BIN%." ( 
05.
>    "%ASANY32BIN%\dbdsn.exe" -ls >> "%~dpn0.log" 
06.
>    "%ASANY32BIN%\dbdsn.exe" -ls | FINDSTR /I /c:"myapp_32bit" >> "%~dpn0.log" 
07.
>   ECHO ERRORLEVEL: %ERRORLEVEL% >> "%~dpn0.log" 
08.
>   IF ERRORLEVEL 1 ( 
09.
>       "%ASANY32BIN%\dbdsn.exe" -y -ws myapp_32bit -c "eng=myapp;LINKS=TCPIP;Description=MyApp - 32bit" 
10.
> >> "%~dpn0.log" 2>> "%~dpn0.log" 
11.
>    )    
12.
> ) 
13.
> ECHO *-------------- >> "%~dpn0.log" 
14.
> 
1. Es ist nicht immer gut, alles in's NUL-Nirwana zu senden, was Aufschluss über den Verlauf geben könnte.
Oben gezeigter Code ist ein Ausschnitt und nur die Originalfassung. Um die fehlerstelle einzuschränken hatte ich diverse Hilfsausgaben eingebaut.
Ergebnis ist, dass die Zeile ["%ASANY32BIN%\dbdsn.exe" -ls | FINDSTR /I /c:"myapp_32bit"] den Fehler verursacht und danach nichts mehr vom Skript ausgeführt wird.
Die verwendeten Umgebungsvariablen werden vorher in eine Protokolldatei ausgegeben und sind korrekt.

2. Und was soll in dem Fall passieren, wenn "%ASANYBIN%." == "%ASANY32BIN%." ???
da soll nichts passieren.

Die Log-Datei entsteht im Verzeichnis der Cmd-Datei. Poste die Log-Datei hier. Vielleicht steht ja ein Hinweis auf das Problem
darin.

Ein möglicher Grund wäre z.B., daß der Benutzer "System" schlicht keinen Zugriff auf den DB-Server hat,
bei der Erzeugung des DSN das Programm dbdsn.exe aber eine funktionierende Verbindung aufzubauen versucht... aber das ist
lediglich eine Mutmaßung von mir.
Das Programm (dbdsn.exe) muss keinen Zugriff auf den DB-Server haben... es ließt die ODBC-Einträge von Windows aus. Bzw. im zweiten Kommando wird ein ODBC-Eintrag erzeugt... aber soweit kommt das Skripte bei dem Kunden nicht.

Gibt es eine Möglichkeit ein Batch-Skript als Benutzer=SYSTEM auszuführen? der Test Vorort im Produktivsystem ist aufwendig und ist nur nachts machbar.
Bitte warten ..
Mitglied: pieh-ejdsch
12.08.2011 um 14:20 Uhr
moin,

eventuell erscheint beim Kunden im Eigenschaftendialog der Fraglichen "Exe" oder "bat" bzw eher "cmd":
Die Datei stammt von einem Anderen Computer ... Zugriff erlauben -> Haken setzen.

Wird denn der Errorlevel in der if-Schleife auch dementsprechend gesetzt?
sonst die Klammer weglassen und mit einer Sprungmarke Arbeiten.

Gruß Phil
Bitte warten ..
Mitglied: eccos01
12.08.2011 um 14:32 Uhr
Zitat von pieh-ejdsch:
moin,

eventuell erscheint beim Kunden im Eigenschaftendialog der Fraglichen "Exe" oder "bat" bzw eher
"cmd":
> Die Datei stammt von einem Anderen Computer ... Zugriff erlauben -> Haken setzen.

Wird denn der Errorlevel in der if-Schleife auch dementsprechend gesetzt?
sonst die Klammer weglassen und mit einer Sprungmarke Arbeiten.

Gruß Phil
Hallo Phil,

alle Programme liegen lokal auf dem ausführenden System.
Bzgl. Errorlevel... dbdsn.exe würde normalerweise einen Errorlevel zurückgeben... aber auswerten kann man es nicht mehr... die Skriptausführung wird abgebrochen.

Und ich muß noch einmal draufhinweisen... das Skript mit dem programm und allen Variablen läuft auf zig Systemen. Auch auf Systemen mit demselben Betriebssystem.
Es muß also irgendeine Systemeinstellung / Richtlinie oder ähnliches sein, die dieses Problem verursacht.
Bitte warten ..
Mitglied: bastla
12.08.2011 um 14:50 Uhr
@PH
Wird denn der Errorlevel in der if-Schleife auch dementsprechend gesetzt?
Zu dieser Frage hat der TE ja schon geantwortet - an der Abfrage (es wird ja nicht %errorlevel% verwendet) sollte es aber jedenfalls auch innerhalb der Schleife nicht scheitern ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...