dennisvot
Goto Top

Visual Basic Anwendung, Probleme mit Ordnerumleitung

Hallo zusammen,

ich habe folgendes Problem, zu dem ich weitere Ideen zur Lösungsfindung suche:

Windows 7 prof. (und ebenfalls XP)
Ein Programm, geschrieben mit Visual Basic, vermutlich irgendwo zwischen Version 4 und 6.

Ursprünglich war der Rechner nicht im Netzwerk integriert, daher wurden die üblichen Pfade verwendet für "Eigene Dateien" etc. Das Programm funktioniert auf dieser Standard-Installation. Es greift auf drei Verzeichnisse zu:

C:\Program Files\FOO\
C:\Program Files\Common Files\FOO\
C:\Users\User\Documents\FOO\

Der Rechner wurde dann in ein Domänen-Netzwerk integriert, es wird eine Ordnerumleitung verwendet.
Statt C:\Users\User\Documents\FOO\ wird jetzt X:\ocuments\FOO\ bzw. in UNC-Form \\SERVER\Userdirs\User\Documents\FOO\ verwendet.
Das Programm kann offensichtlich auf den umgeleiteten Ordner zugreifen, denn es erstellt beim ersten Start seinen entsprechenden Ordner in den Documents. Trotzdem bricht es kurz nach dem Start ab mit einer Fehlermeldung 5, Ungültiger Parameter. Starte ich das Programm mit dem ursprünglichen lokalen Benutzer funktioniert es weiterhin. Es soll (nach Überlieferung durch einen Kollegen) für die Pfadfindung eine dll verwendet werden mit der Funktion shGetFolderPath.

Das Programm selbst ist eine Eigenentwicklung. Der Entwickler ist nicht mehr greifbar, der Quelltext nicht verfügbar.


Hat jemand eine Idee, wo ein Problem vorliegen könnte?


Danke für Eure Hilfe,
Dennis

Content-Key: 288091

Url: https://administrator.de/contentid/288091

Printed on: April 18, 2024 at 20:04 o'clock

Member: emeriks
emeriks Nov 11, 2015 at 13:34:37 (UTC)
Goto Top
Hi,
Du könntest mit dem Process Explorer versuchen, herauszufinden, bei welchem Zugriff genau das Programm aussteigt.

E.
Member: DennisVot
DennisVot Nov 11, 2015 at 14:44:05 (UTC)
Goto Top
Hi,

also ich bekomme zumindest keinen Zugriff auf einen Pfad angezeigt, der so nicht existiert.

Gruß
Dennis
Member: emeriks
emeriks Nov 11, 2015 at 19:22:59 (UTC)
Goto Top
Fehlermeldung 5, Ungültiger Parameter
Der Windows Standardfehler 5 bedeutet "Zugriff verweigert", nicht "Pfad nicht existent", das wäre 2 oder 3.

Und es könnte sich auch um einen Registry-Zugriff handeln.

Ist der lokale Benutzer zufällig auch Mitglied der lokalen Administratoren und der Domänenbenutzer nicht?
Member: runasservice
runasservice Nov 11, 2015 at 19:55:14 (UTC)
Goto Top
Hallo,

Der Windows Standardfehler 5 bedeutet "Zugriff verweigert", nicht "Pfad nicht existent", das wäre 2 oder 3.

Jo, ist aber ein VB-Programm und hier hat der Fehler 5 eine andere Bedeutung:

Unzulässiger Prozeduraufruf oder ungültiges Argument (Fehler 5)

Sieht also so aus, als ob die Umleitung nicht vollständig ist bzw. eine davon ins Leere zeigt. Ohne den Quellcode zu kennen ist das natürlich auch nur eine Spekulation...

MfG Andreas
Member: DennisVot
DennisVot Nov 17, 2015 at 13:07:38 (UTC)
Goto Top
Hallo Andreas,

Mit "nicht vollständig" meinst Du, dass es quasi einen Ordner geben müsste, der lokal existiert und daher ohne Ordnerumleitung bzw. mit dem lokalen User angesprochen werden kann und das es das passende Gegenstück in der Freigabe auf dem Server, in den die Ordner umgeleitet werden, nicht gibt?
Das wäre ja dann nur der "Documents"-Ordner, also "Eigene Dokumente" in der übersetzten Variante. Der ist aber doch lokal und in der Freigabe verfügbar, schreibbar und wird auch beim ersten STart des Programms angelegt:

lokal: C:\Users\User\Documents\FOO\
umgeleitet: X:\Documents\FOO\ (\\SERVER\Userdirs\User\Documents\FOO\)

Meine aktuelle Lösung besteht darin, dass der Rechner keine Ordnerumleitung hat, dann funktioniert das Programm, obwohl der Rechner in der Domäne hängt. Aber das ist eigentlich nicht die gewünschte Verwendung.
Kann ich denn dem Programm einen lokalen Ordner vorgaukeln, der tatsächlich in einer Freigabe liegt? Oder die Ordnerumleitung für das einzelne Programm außer Kraft setzen?


Gruß
Dennis
Member: emeriks
emeriks Nov 17, 2015 at 13:34:56 (UTC)
Goto Top
Kann ich denn dem Programm einen lokalen Ordner vorgaukeln, der tatsächlich in einer Freigabe liegt?
Genau das ist "Ordnerumleitung".

Oder die Ordnerumleitung für das einzelne Programm außer Kraft setzen?
Sandboxen. Oder das Programm über "ausführen als" unter einem anderen Konto laufen lassen.
Member: runasservice
runasservice Nov 17, 2015 updated at 13:52:11 (UTC)
Goto Top
Hallo,

wenn Du noch Zugriff auf ein MS Visual Studio 6 hast, kannst Du das selber prüfen. Lade Dir einfach mal einen folgenden (VB6) Code und prüfe deine Umleitungen:

http://vbnet.mvps.org/index.html?code/browse/csidl.htm

Der Fehler 5 (Unzulässiger Prozeduraufruf oder ungültiges Argument) wird u.a. geworfen, wenn ein String-Kommando auf ein Leerstring erfolgt. Nehmen wir mal direkt das Beispiel von Microsoft für die SHGetFolderPath-Funktion:

RetVal = SHGetFolderPath(0, CSIDL_LOCAL_APPDATA Or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, sPath)

Select Case RetVal
    Case S_OK
        ' We retrieved the folder successfully  
        
        ' All C strings are null terminated  
        ' So we need to return the string upto the first null character  
        sPath = Left(sPath, InStr(1, sPath, Chr(0)) - 1)
        Text1.Text = sPath
    Case S_FALSE
        ' The CSIDL in nFolder is valid, but the folder does not exist.  
        ' Use CSIDL_FLAG_CREATE to have it created automatically  
        MsgBox "The folder does not exist"  
    Case E_INVALIDARG
        ' nFolder is invalid  
        MsgBox "An invalid folder ID was specified"  
    
End Select


Zeile 9 würde jetzt einen Fehler 5 produzieren, wenn der Pfad (sPath) leer ist, bzw deine Umleitung ins Leere zeigt.

Mit freundlichen Grüßen Andreas