Hallo,
wie kann ich unter Windows feststellen, ob ein gegebener Pfad auf einem lokalen Laufwerk oder auf einem Share liegt?
Hintergrund: in einer Windows-Applikation habe ich das Problem, daß ich wissen muß, ob ein Pfad auf einem lokalen Laufwerk oder auf einem Share liegt. Hintergrund ist, daß für die Hilfe CHM-Dateien benutzt werden, die über die IE-Engine geöffnet werden und entsprechende Sicherheitsprobleme aufwerfen. Die entsprechenden Dateien befinden sich in einem Pfad relativ zu der Applikation. Verschiebe ich meine Applikation auf ein Share, dann werden die nachzuladenden Dateien von der IE-Engine als unsicher klassifiziert. Ich möchte aber weder die systemweiten Sicherheitsrichtlinien, noch die Registry anpassen müssen.
Vielen Dank im Voraus
Wolfgang
Ist ein Pfad lokal oder auf einem Share?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Wolfgang!ws hat geschrieben:wie kann ich unter Windows feststellen, ob ein gegebener Pfad auf einem lokalen Laufwerk oder auf einem Share liegt?
Ich bin mir nicht sicher... probiere es mal mit ``os.path.ismount``.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo Gerold,
vielen Dank für den Tip. Leider liefert auch os.path.ismount(r"c:") True, d.h. daran kann ich nicht erkennen, ob es ein Netzwerklaufwerk ist. Eine Lösung gibt es, wenn man die win32-Module an Bord hat (ungetestet):
Gruß
Wolfgang
vielen Dank für den Tip. Leider liefert auch os.path.ismount(r"c:") True, d.h. daran kann ich nicht erkennen, ob es ein Netzwerklaufwerk ist. Eine Lösung gibt es, wenn man die win32-Module an Bord hat (ungetestet):
Code: Alles auswählen
def isPathOnNetworkDevice(pth):
"""
Check if path pth is located on a network drive.
"""
ret = False
pth = os.path.abspath(pth)
if os.path.exists(pth):
# path exists, does it contain a drive letter?
head, tail = os.path.splitdrive(pth)
if head:
try:
win32net.NetUseGetInfo(None, pth)
ret = True
except pywintypes.error, e:
# this is not a network drive
pass
else:
# pth does not start with a drive letter, so it has to be
# located on an network drive
ret = True
return ret
Wolfgang
Obige Lösung war noch etwas buggy, in Zeile 15 müßte es
heißen.
Gruß
Wolfgang
Code: Alles auswählen
win32net.NetUseGetInfo(None, head)
Gruß
Wolfgang
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie hilft dir das, wenn der Share als Platte eingebunden ist, also quasi als Laufwerk sichtbar ist und keinen UNC-Pfad hat?mosenturm hat geschrieben:os.path.splitunc()
Ansonsten wäre es ja trivial, da müsste man nur schauen ob der Pfad mit ``\\`` anfängt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- mosenturm
- User
- Beiträge: 23
- Registriert: Dienstag 15. Juli 2008, 17:54
- Wohnort: Plauen
- Kontaktdaten:
Kann ich leider nicht testen. Aber selbst wenn dem Share ein Laufwerksbuchstabe zugeordnet ist, ist doch irgendwo intern ein UNC Pfad vorhanden. Vielleicht kann das ja mal jemand testen.Leonidas hat geschrieben:Wie hilft dir das, wenn der Share als Platte eingebunden ist, also quasi als Laufwerk sichtbar ist und keinen UNC-Pfad hat?mosenturm hat geschrieben:os.path.splitunc()
Viele Grüße
Andreas
Andreas
- mosenturm
- User
- Beiträge: 23
- Registriert: Dienstag 15. Juli 2008, 17:54
- Wohnort: Plauen
- Kontaktdaten:
os.path.splitunc() macht ja nichts weiter, als einen String zu zerlegen. Ich dachte, hier werden irgendwelche OS-spezifische Befehle im Hintergrund ausgeführt.
Somit ist es natürlich nicht für die Problemlösung zu gebrauchen.
Es bleiben nur noch Windows-API aufrufe über das pywin32 Paket.
Unter folgenden Links gibt es dazu Infos (muss natürlich noch in Python umgesetzt werden ):
http://support.microsoft.com/support/kb ... 2/6/89.ASP
http://www.dbwiki.de/wiki.php?title=VBA ... _ermitteln
Somit ist es natürlich nicht für die Problemlösung zu gebrauchen.
Es bleiben nur noch Windows-API aufrufe über das pywin32 Paket.
Unter folgenden Links gibt es dazu Infos (muss natürlich noch in Python umgesetzt werden ):
http://support.microsoft.com/support/kb ... 2/6/89.ASP
http://www.dbwiki.de/wiki.php?title=VBA ... _ermitteln
Viele Grüße
Andreas
Andreas