Process32First/Process32Next: Brauche ich QueryFullProcessImageName() ab Vista?
-
Hi!
Ich frage mich, ob QueryFullProcessImageName() nötig ist, wenn ich Prozesse enumeriere.
Alles was ich möchte, ist den Namen der .exe herauszufinden.Wie ist das eigentlich allgemein mit den Pfaden? Gibt es mehr als MAX_PATH (Und unter Vista+?)?
Bei welchen Funktionen muss ich mehr beachten, als einfach nur einen Buffer mit MAX_PATH anzulegen?Verwirrt mich

Danke schonmal!
MFG
-
zB. wenn ich GetModuleFileName() aufrufe, mit einem MAX_PATH buffer, dann könnte das doch Probleme geben?
Oder können die API's mit mehr als MAX_PATH umgehen?Ich habe mir das http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx angesehen, kapiere es aber leider nicht. Ist mir einfach zu frickelig.

-
Ich merk grad, unter Windows 7 kann man auch nicht mehr als 260 Zeichen in einem full qualified path verwenden.
Hä? Und was ist dann mit diesen tollen 32tausendundirgendwas Pfaden?
-
Normalerweise steht bei den API-Funktionen dabei, ob sie längere Pfadnamen unterstützen. Wenn es nicht dabeisteht, dann hilft nur ausprobieren.
-
MSDN zu GetModuleFileName schrieb:
The path can have the prefix "\?\", depending on how the module was loaded.
MSDN zu Naming Files schrieb:
The Unicode versions of several functions permit a maximum path length of 32,767 characters, composed of components up to 255 characters in length. To specify such a path, use the "\?\" prefix.
Heißt für mich soviel, als dass du schon 32 KB bereitstellen solltest. Oder du kannst es erst mit MAX_PATH versuchen, und je nach Rückgabewert doch noch auf 32 KB aufstocken.
-
Aber welcher Pfad soll 32tausend Zeichen haben?
Unter Win7 kann ich auch nur Pfade bis 260 Zeichen anlegen (Inklusive X:\ und Null-Terminierung).
-
Du hast mit den 32000 Zeichen angefangen. Ansonsten lies mal Deinen Link, dort steht alles Wissenswerte zu Pfaden mit bis zu 32000 Zeichen drin.
-
Fragö schrieb:
Unter Win7 kann ich auch nur Pfade bis 260 Zeichen anlegen (Inklusive X:\ und Null-Terminierung).
Mit "\?\C:\..." gehts unter Vista. Ich bekomme die Ordner gerade nur nicht mehr gelöscht, insgesamt sinds aber >6000 Zeichen und der Explorer weigert sich sogar, bis zum Ende durchzunavigieren, Kommandozeile auch..
-
Badestrand schrieb:
Ich bekomme die Ordner gerade nur nicht mehr gelöscht, insgesamt sinds aber >6000 Zeichen und der Explorer weigert sich sogar, bis zum Ende durchzunavigieren, Kommandozeile auch..
Der SpeedCommander sollte das schaffen.
-
-
Aber wenn man jetzt manuell im Explorer zB. nach C:\ geht und dort anfängt, Ordner anzulegen, ist bei 259 chars Schluss.

-
Für den Explorer und die Shell ist bei 260 Zeichen Schluss. Steht aber auch wieder (etwas verklausuliert) in Deinem Link:
To sort out some of this, the following items are different examples of Win32 namespace prefixing and conventions, and summarizes how they are used. Note that these examples are intended for use with the Win32 API functions and do not all necessarily work with Windows shell applications such as Windows Explorer.
-
Ich kapier's nicht.
Könnte zB. ein Spiel in einem Pfad mit mehr als 260 Zeichen installiert sein?
-
Sagen wir's mal so: Es ist sehr, sehr unwahrscheinlich, dass du auf Pfade triffst, wo MAX_PATH nicht ausreicht. Jeder Softwarehersteller wird wohl die damit auftretenden Probleme umgehen wollen.
Ich würde so einen Fall ruhigen Gewissens mit "GetModuleFileName ist fehlgeschlagen" gleichsetzen.
-
260 Zeichen kann man auch unwissend überschreiten. Wenn z.B. das letzte Verzeichnis einer tiefen Struktur (200 Zeichen) freigegeben wird und auf dem anderen Rechner wiederum eine tiefere Struktur angelegt wird, dann kann der erste Rechner (auf dem die Daten ja lokal liegen) nicht mehr auf die gesamte Struktur zugreifen.
