myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Application.ExecutablePath und Effekte durch Sonderzeichen im Path
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Application.ExecutablePath und Effekte durch Sonderzeichen im Path

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
myCSharp.de
Moderationshinweis von herbivore (11.07.2014 07:43):

Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank!
 
Eco Eco ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2014
Beiträge: 12
Entwicklungsumgebung: Visual Studio 2010


Eco ist offline

Application.ExecutablePath und Effekte durch Sonderzeichen im Path

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich habe ein merkwürdiges Phänomen i.V. mit System.Windows.Forms.Application.ExecutablePath und Sonderzeichen festgestellt.
Bisher konnte ich hier nur das Rautenzeichen ('#') identifizieren, welches im Pfad dafür sorgt, dass als nachfolgende Pfadtrennzeichen der Slash ('/') statt des Backslashes ('\') zurückgegeben wird.

Beispiel: Pfad des Executables "c:\test1\test#2\test3\test.exe", Rückgabe von System.Windows.Forms.Application.ExecutablePath: "c:\test1\test#2/test3/test.exe".
Wenn man es weiß, ist dem Problem natürlich recht einfach beizukommen.

Kann mir jemand erklären, warum dies so ist und ob es noch andere Sonderzeichen gibt, die das verursachen?

Besten Dank im voraus.

Gruß
09.07.2014 16:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

warum siehst du dadrin ein Problem? Benutze für Pfadoperationen immer die Path-Klasse und es ist egal, welcher Separator benutzt wird.
09.07.2014 18:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.453
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Eco,

vorneweg: ich halte das Verhalten für einen Bug des Framworks bzw. des zugrundeliegenden Windows APIs. Das kommt zwar extrem selten vor, aber es kommt in eher seltenen Spezialfällen eben doch manchmal vor.

An deiner Stelle würde ich mal die anderen Möglichkeiten aus  [FAQ] Pfad zur eigenen Anwendung (EXE) ermitteln probieren, ob die vielleicht mit Doppelkreuzen in Pfaden klar kommen.

Über die Ursachen und über die Wirkung anderer Sonderzeichen kann nur spekulieren, halte es jedoch für wahrscheinlich, dass der intern der Pfad teilweise behandelt wird wie eine Url und die Probleme daher resultieren. In Urls hat das Doppelkreuz eine besondere Bedeutung, weil dahinter ein Anchor steht. Daher werden die folgenden Slashes wohl nicht mehr als Pfad-Trenner betrachtet und in Backslashes umgewandelt/angepasst, sondern unverändert durchgereicht.

Von daher würde ich vermuten, dass ein ähnlicher Effekt bei Verwendung eines Fragezeichens eintreten würde, das in Urls die Parameter einleitet. Das ist allerdings auch nur Spekulation. In normalen Pfadnamen sind Fragezeichen jedoch sowieso nicht erlaubt. Möglicherweise könnte ein Fragezeichen jedoch bei Pfaden auftauchen, die länger sind als 254 oder 255 Zeichen (siehe  Naming Files, Paths, and Namespaces für die Namensregeln von Datei- bzw. Pfadnamen).

Andere Zeichen, die in Url den eigentlichen Pfad beenden und etwas anderes einleiten (als Parameter oder Anchor), fallen mir nicht ein. Daher würde ich erwarten, dass andere Sonderzeichen keine Probleme verursachen. Aber auch das ist wieder nur Spekulation.

Die Implementierung des Getters von ExecutablePath deutet auf jeden Fall darauf hin, dass Pfade teilweise wie Urls (=Uris) behandelt werden:

C#-Code:
public static string get_ExecutablePath()
{
    if (executablePath == null)
    {
        Assembly entryAssembly = Assembly.GetEntryAssembly();
        if (entryAssembly == null)
        {
            StringBuilder buffer = new StringBuilder(260);
            UnsafeNativeMethods.GetModuleFileName(NativeMethods.NullHandleRef, buffer, buffer.Capacity);
            executablePath = IntSecurity.UnsafeGetFullPath(buffer.ToString());
        }
        else
        {
            string escapedCodeBase = entryAssembly.EscapedCodeBase;
            Uri uri = new Uri(escapedCodeBase);
            if (uri.Scheme == "file")
            {
                executablePath = NativeMethods.GetLocalPath(escapedCodeBase);
            }
            else
            {
                executablePath = uri.ToString();
            }
        }
    }
    Uri uri2 = new Uri(executablePath);
    if (uri2.Scheme == "file")
    {
        new FileIOPermission(FileIOPermissionAccess.PathDiscovery, executablePath).Demand();
    }
    return executablePath;
}

Siehe  GetModuleFileName function für die Beschreibung der zugrundeliegenden API-Funktion, auch wenn ich darin keine direkten Hinweise auf den konkreten Effekt gefunden habe.

herbivore
10.07.2014 07:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Eco Eco ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2014
Beiträge: 12
Entwicklungsumgebung: Visual Studio 2010

Themenstarter Thema begonnen von Eco

Eco ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für Eure Antworten. Das Verhalten scheint sich auf "ExecutablePath" zu beschränken, die anderen Möglichkeiten der FAQ liefern stets Backslashes als Trennzeichen zurück.

Im konkreten Fall wurde leider nicht die Path-Klasse zur Verarbeitung des Pfades verwendet, sondern Substring-Operationen, die einen Backslash erwarteten.


mycsharp.de  Moderationshinweis von herbivore (10.07.2014 09:08):

Was wieder mal zeigt, warum man besser immer die Path-Klasse verwenden sollte. :-)
 

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Eco am 10.07.2014 08:44.

10.07.2014 08:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Jahre.
Der letzte Beitrag ist älter als 4 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.06.2019 21:58