Name einer Anwendung ermitteln!

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Name einer Anwendung ermitteln!

    Hey, wer kann mir helfen?

    Meine Frage(n):
    Wie kann ich in einer Klassenbibliothek den Namen der Anwendung ermitteln, in der diese .DLL benutzt werden soll?
    ...und danach, wenn möglich, Informationen über die Anwendung (aus der Klassenbibliothek heraus) bereit stellen?
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Was ist denn das für eine DLL?
    .NET - Methoden / Properties von Application,
    C++ - GetModulFileName().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ RodFromGermany
    Es ist eine von mir mit VB2008 selbst erstellte DLL, die ich über
    einen Verweis in einer, ebenfalls von mir unter VB2008 erstellten
    Anwendung nutze!
    Sorry-ich meinte, das geht schon aus meiner Frage hervor :S

    Ich dachte, dass man es etwa in diesem Stil machen könnte:

    VB.NET-Quellcode

    1. Public Shared Function Version() As String
    2. Return "Version " & DHBlibC.My.Application.Info.Version.ToString
    3. End Function

    Allerdings ermittle ich damit ja nur (z.B.) die Version der aktuellen DLL
    und erreiche so jedenfalls nicht irgendwelche Infos über die Anwendung,
    in der ich die DLL benutze!
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Nein, auf das Hauptprogramm (die Exe) kannst Du so nicht zugreifen, das müsstest Du über Reflections machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ RodFromGermany
    ich such seit Tagen unter dem Stichwort "Reflections" (und anderes);
    finde zwar viele interessante andere Themen, aber leider nichts, was
    mein Problem löst. Wenn Dir noch etwas zu meiner Frage einfällt,
    dann poste es - ansonsten danke für Dein Interesse :!:
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Kleiner Beispielcode. Ich hoffe, ich hab Dich richtig verstanden, was Du erreichen willst....

    Beispielcode .dll

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Public Class Class1
    3. Public Shared Function GetAppName() As String
    4. Dim asm As Assembly = Assembly.GetCallingAssembly()
    5. Return asm.FullName
    6. End Function
    7. End Class


    Beispielcode Anwendung

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. MessageBox.Show(ClassLibrary4.Class1.GetAppName())
    4. End Sub
    5. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @SpaceyX
    (genau) das hatte ich gesucht, das Leben kann so einfach sein :thumbsup:

    Allerdings hätte ich jetzt nicht erwartet, dass die Functionen .FullName und .GetName.ToString
    das selbe Ergebnis liefern, aber der Name läßt sich ja leicht aus dem Rückgabewert extrahieren.

    Wie dankbar ich Dir bin, kann nur jemand ermessen, der so lange nach einer Lösung gesucht hat
    wie ich - habe nämlich bis vor Kurzem noch mit VB6 programmiert! Ist zwar "so" alles viel besser,
    aber es fällt mir doch noch sehr schwer, für eben solche Probleme den richtigen Ansatz zu finden ?(
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Hab grad nochmal geguggt. So bewandert bin ich mit Reflection auch nicht.

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Public Class Class1
    3. Public Shared Function GetAppName() As String
    4. Dim asm As Assembly = Assembly.GetCallingAssembly()
    5. Return asm.GetName().Name
    6. End Function
    7. End Class


    Das liefert nur den Namen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Probier mal

    VB.NET-Quellcode

    1. Return asm.CodeBase
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi
    ich hatte das im 1. Beitrag anders aufgefasst. Willst du nicht die Dll quasi eindeutig einer Assembly zuordnen, die sie verwenden soll? Das bisherige liefert dir ja quasi nur den Namen der Assembly, die aufruft.
    CodeBase ist die URI, die angibt, woher die Assembly kommt, also bsp. der Dateipfad zur Assembly.

    Gruß
    ~blaze~
    @SpaceyX
    Soweit klappt alles bestens!

    Der Knüller wäre für mich, wenn man auch die aufrufende Form als Objekt in der DLL
    ermitteln könnte, denn dann würde ich die benötigten Formeigenschaften direkt in der
    DLL-Methode auswerten; bisher übergebe ich die Form als Parameter (Me) - geht
    natürlich auch!

    Ich habe mit mehreren Varianten entsprechend Deines geposteten Codes experimentiert,
    aber leider mal wieder nichts gefunden - geht das überhaupt was ich mir da vorstelle?
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.

    DHB schrieb:

    Der Knüller wäre für mich
    Sieh Dir mal diesen Post an und werte einfach mal den StackTrace in Deiner DLL-Funktion aus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Was da in Deinem Link beschrieben wird, ist ganz was anderes - ich brauche ein Objekt
    und das aus einer anderen Assembly heraus, so wie SpaceyX es mir für den Namen der
    Anwendung (hier war es allerdings nur ein String) gezeigt hat.

    @ErfinderDesRades
    Naja, das weiß ich schon, aber in meinem Falle ist es wohl durchaus legitim, da die Methode
    in der DLL lediglich bestimmte Eigenschaften einer Form unter dem Namen der Anwendung
    speichern soll - und das eben für den Entwickler so bequem wie möglich!
    Wie man den Namen der Anwendung ermittelt, weiß ich ja jetzt und wenn es auch noch mit
    dem aufrufenden FormObject funktionieren würde, dann bräuchte man lediglich in der DLL
    eine parameterlose Shared-Methode mit SaveProperties() aufrufen und alles Andere würde
    dann dort erledigt werden. Bisher mache ich es jedenfalls so:
    SaveProperties(Me); und es ist auch kein "Beinbruch", wenn es so bleibt!
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Das ganze ist mir sehr suspekt :!:

    DHB schrieb:

    ich brauche ein Objekt
    Dann musst Du wohl oder übel einen Parameter mit der Referenz auf Me übergeben.
    Auf was für einen Typ soll das denn in der DLL gecastet werden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!