Batch Datei startet VBS mit Fehler
Hallo zusammen
seit kurzem, so wie es aussieht wurde auf unseren Firmen Netzwerk PC der Service Pack 2 bei Windows Professional bzw. auch bei Access habe ich schon Service Pack 2 bei den Infos gelesen.
Ich hatte bisher eine Batch Datei die eine VBS Datei gestartet hatte.
So und nun die Mitarbeitertool.vbs
Bei dieser VBS Datei kommt es seit dem Einspielung der Service Packs (vermutlich) zu einem Fehler in der Zeile 17. Komischerweise nicht bei jedem PC, aber bei der Mehrheit.
Zeile 17: WSHShell.OpenCurrentDatabase Link
Die VBS war damals dafür gedacht das die meheren Abfragen bevor die Access Anwendung gestartet wird umgangen wurden, damit der Mitarbeiter nicht verwirrt werden was sie nun drücken sollte, ob unsichere Ausdrücke blockieren oder nicht etc.
Wenn man in der Bat Datei statt der vbs die mde startet ist es ja auch o.k. aber dann bleibt das Dos Fenster auf und das verwirrt wieder.
Kann mir jemand helfen ?
Marja
seit kurzem, so wie es aussieht wurde auf unseren Firmen Netzwerk PC der Service Pack 2 bei Windows Professional bzw. auch bei Access habe ich schon Service Pack 2 bei den Infos gelesen.
Ich hatte bisher eine Batch Datei die eine VBS Datei gestartet hatte.
::mitarbeiter.bat
@echo off
if not exist F:\Desktop mkdir f:\Desktop
echo Es wird nun ?berprft ob eine neue Version existiert!
echo ...
echo Bitte warten Sie ! Das Mitarbeitertool wird gleich gestartet!
echo ...
copy G:\FM\Access\xxx\MitarbeiterTool\Desktop\Mitarbeitertool.lnk F:\Desktop/d
if not exist C:\Temp\%username%\Mitarbeitertool mkdir C:\Temp\%username%\Mitarbeitertool
replace G:\FM\Access\xxx\MitarbeiterTool\Desktop\Mitarbeitertool.mde C:\Temp\%username%\Mitarbeitertool/a
replace G:\FM\Access\xxx\MitarbeiterTool\Desktop\Mitarbeitertool.mde C:\Temp\%username%\Mitarbeitertool/u
replace G:\FM\Access\xxx\MitarbeiterTool\Desktop\Mitarbeitertool.vbs C:\Temp\%username%\Mitarbeitertool/a
replace G:\FM\Access\xxx\MitarbeiterTool\Desktop\Mitarbeitertool.vbs C:\Temp\%username%\Mitarbeitertool/u
C:\Temp\%username%\Mitarbeitertool\Mitarbeitertool.vbs
Option Explicit
Const acCmdAppMaximize = 10
dim link
dim wshnetwork
dim wshshell
dim ingret
Set WshNetwork = WScript.CreateObject("WScript.Network")
Link = "C:\Temp\" &WshNetwork.UserName & "\Mitarbeitertool\Mitarbeitertool.mde"
Set WSHShell = WScript.CreateObject("Access.Application")
WSHShell.automationsecurity=1 ' low.
WSHShell.OpenCurrentDatabase Link
WSHShell.visible=true
WSHShell.RunCommand acCmdAppMaximize
WSHShell.docmd.Maximize
WSHShell.usercontrol=true
Bei dieser VBS Datei kommt es seit dem Einspielung der Service Packs (vermutlich) zu einem Fehler in der Zeile 17. Komischerweise nicht bei jedem PC, aber bei der Mehrheit.
Zeile 17: WSHShell.OpenCurrentDatabase Link
Die VBS war damals dafür gedacht das die meheren Abfragen bevor die Access Anwendung gestartet wird umgangen wurden, damit der Mitarbeiter nicht verwirrt werden was sie nun drücken sollte, ob unsichere Ausdrücke blockieren oder nicht etc.
Wenn man in der Bat Datei statt der vbs die mde startet ist es ja auch o.k. aber dann bleibt das Dos Fenster auf und das verwirrt wieder.
Kann mir jemand helfen ?
Marja
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 27031
Url: https://administrator.de/contentid/27031
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Moin Marja,
ich lese mir das nun auch zum dritten Mal durch, ohne eine richtig wahrscheinliche Erklärung für dieses Phänomen zu finden.
Ich denke, die ganz unwahrscheinlichen Gründe hast Du bestimmt schon selbst überprüft und ausgeschlossen (Leerzeichen im %username%; Fehlendes laufwerk F: ; keine Rechter auf C:\temp\; kein WSH/VBS installiert oder nicht erlaubt;...)
Hast Du denn
a) mal den inhalt von "Link" anzeigen lassen? Kommt da noch ein plausibler String raus?
b) was sagt denn in Fehlermeldung in Zeile 19 außer "Fehler"?
Gruß
Biber
ich lese mir das nun auch zum dritten Mal durch, ohne eine richtig wahrscheinliche Erklärung für dieses Phänomen zu finden.
Ich denke, die ganz unwahrscheinlichen Gründe hast Du bestimmt schon selbst überprüft und ausgeschlossen (Leerzeichen im %username%; Fehlendes laufwerk F: ; keine Rechter auf C:\temp\; kein WSH/VBS installiert oder nicht erlaubt;...)
Hast Du denn
a) mal den inhalt von "Link" anzeigen lassen? Kommt da noch ein plausibler String raus?
b) was sagt denn in Fehlermeldung in Zeile 19 außer "Fehler"?
Gruß
Biber
Hallo,
nun, möglicherweise wurde mit dem Service-Pack 2 von Acces hier etwas dahingehend verändert, daß z.B. hier über VBS nicht mehrere User gleichzeitig auf das Object zugreifen können.
Die Frage ist, ob sich der Exclusivmodus umstellen läßt, ob es dafür einen Schalter oder Eintrag gibt. Dazu kenne ich aber Acces zu wenig.
Daß es mit cls, eof oder exit nicht klappt, habe ich mir fast gedacht. In den meisten Fällen startet die Batch ein Programm/Datei und springt dann zur nächsten Zeile ohne die Ausführung abzuwarten. Bei manchen Anwendungen klappt das aber nicht so, da hier die nächste Zeile erst ausgeführt wird, wenn der vorherige Aufruf abgearbeitet ist. Was hier der Fall zu sein scheint.
In einer VBS z.B. kann man eine Batch starten ohne daß sich ein Fenster öffnet mit
WSHShell.Run "%Comspec% /c Name.bat", 0
Wobei die 0 am Ende dafür sorgt, daß die Batch unsichtbar ausgeführt wird.
Ansonsten kannst du mal versuchen mit "On Error Resume Next" zu testen.
Dazu benötigst Du aber den Rückgabecode für fehlerfreie oder fehlerhafte Ausführung, den Du bekommst mit "x = WSHShell.OpenCurrentDatabase Link" und in der VBS z.B. mit
do
On Error Resume Next
x = WSHShell.OpenCurrentDatabase Link
Err.Clear
WScript.Sleep 1000
Loop Until x = ?
Damit bleibt das Script solange in der Schleife bis der Rückgabecode OK ist. Willst Du den Fehler abfragen dann mit "Loop Until not x = ?". Das klappt aber nicht bei allen Fehlermeldungen. Mußt eben mal testen.
MfG maneich
nun, möglicherweise wurde mit dem Service-Pack 2 von Acces hier etwas dahingehend verändert, daß z.B. hier über VBS nicht mehrere User gleichzeitig auf das Object zugreifen können.
Die Frage ist, ob sich der Exclusivmodus umstellen läßt, ob es dafür einen Schalter oder Eintrag gibt. Dazu kenne ich aber Acces zu wenig.
Daß es mit cls, eof oder exit nicht klappt, habe ich mir fast gedacht. In den meisten Fällen startet die Batch ein Programm/Datei und springt dann zur nächsten Zeile ohne die Ausführung abzuwarten. Bei manchen Anwendungen klappt das aber nicht so, da hier die nächste Zeile erst ausgeführt wird, wenn der vorherige Aufruf abgearbeitet ist. Was hier der Fall zu sein scheint.
In einer VBS z.B. kann man eine Batch starten ohne daß sich ein Fenster öffnet mit
WSHShell.Run "%Comspec% /c Name.bat", 0
Wobei die 0 am Ende dafür sorgt, daß die Batch unsichtbar ausgeführt wird.
Ansonsten kannst du mal versuchen mit "On Error Resume Next" zu testen.
Dazu benötigst Du aber den Rückgabecode für fehlerfreie oder fehlerhafte Ausführung, den Du bekommst mit "x = WSHShell.OpenCurrentDatabase Link" und in der VBS z.B. mit
do
On Error Resume Next
x = WSHShell.OpenCurrentDatabase Link
Err.Clear
WScript.Sleep 1000
Loop Until x = ?
Damit bleibt das Script solange in der Schleife bis der Rückgabecode OK ist. Willst Du den Fehler abfragen dann mit "Loop Until not x = ?". Das klappt aber nicht bei allen Fehlermeldungen. Mußt eben mal testen.
MfG maneich
Hm, Marja,
und die (unwahrscheinliche) Erklärung, dass es gar nicht an dem VBS-Schnipsel liegt, sondern tatsächlich irgendein User diese Datei manchmal exklusiv öffnet und alle anderen dadurch blockiert?
Gilt denn wenigstens für die User, die NICHT draufkommen, die eine Fehlermeldung bekommen, dass das reproduzierbar ist - auch nach Feierabend, wenn kein anderer User mehr mit der *.mde arbeitet?
Ratlos
Biber
und die (unwahrscheinliche) Erklärung, dass es gar nicht an dem VBS-Schnipsel liegt, sondern tatsächlich irgendein User diese Datei manchmal exklusiv öffnet und alle anderen dadurch blockiert?
Gilt denn wenigstens für die User, die NICHT draufkommen, die eine Fehlermeldung bekommen, dass das reproduzierbar ist - auch nach Feierabend, wenn kein anderer User mehr mit der *.mde arbeitet?
Ratlos
Biber
Hallo,
eine Batch über VBS zu starten ist einfach.
Du schreibst eine VBS z.B. start.vbs
Inhalt:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "CMD.EXE /C Hier genau Adresse + Name.bat der Batch einfügen", 0
WScript.Quit
Beinhaltet die Adresse Leerzeichen dann in Doppelte Hochkomma einschließen.
WshShell.Run "CMD.EXE /C ""Hier genau Adresse + Name.bat der Batch einfügen""", 0
Das ist alles.
@Biber
Man lernt immer wieder etwas dazu; das mit der Angabe "false" war mir nicht bekannt.
MfG maneich
eine Batch über VBS zu starten ist einfach.
Du schreibst eine VBS z.B. start.vbs
Inhalt:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "CMD.EXE /C Hier genau Adresse + Name.bat der Batch einfügen", 0
WScript.Quit
Beinhaltet die Adresse Leerzeichen dann in Doppelte Hochkomma einschließen.
WshShell.Run "CMD.EXE /C ""Hier genau Adresse + Name.bat der Batch einfügen""", 0
Das ist alles.
@Biber
Man lernt immer wieder etwas dazu; das mit der Angabe "false" war mir nicht bekannt.
MfG maneich