Arbeiten mit My.Resources in Visual Studio

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Arbeiten mit My.Resources in Visual Studio

    Hallo Community,

    ich habe da mal eine Frage zu den Resources in Visual Basic. Wie genau kann ich mit denen Arbeiten?

    Ich habe beispielsweise in einem Projekt die CAPICOM.DLL in Verwendung. Diese möchte ich nun gerne in meine exe mit einkompilieren. Genau wie eine Zertifikations-Datei. An einigen Stellen muss als String auf die Cert-Datei verwiesen werden. Wie aber hole ich mir denn den String aus den Resources, bzw. wie arbeite ich mit den Resources von Visual Studio?

    Als Beispiel habe ich hier nun mal das, was der Sign macht mit dem Import von der CAPICOM.DLL

    VB.NET-Quellcode

    1. ​Imports CAPICOM
    2. Public Class clsCodeSigner
    3. Public Function SignCode(strFullFilePath As String, strFullCertFilePath As String, strCertPassword As String, strApplicationName As String)
    4. Try
    5. Dim objSignCode As New SignedCode
    6. Dim objSigner As New Signer
    7. objSigner.Load(strFullCertFilePath, strCertPassword)
    8. objSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
    9. objSignCode.FileName = strFullFilePath
    10. objSignCode.Description = strApplicationName
    11. objSignCode.Sign(objSigner)
    12. objSignCode.Timestamp("http://timestamp.verisign.com/scripts/timestamp.dll")
    13. Return True
    14. Catch ex As Exception
    15. MessageBox.Show(ex.ToString)
    16. Return False
    17. End Try
    18. End Function
    19. End Class


    Wie sage ich ihm denn nun Beispielsweise, dass er bei "strFullCertFilePath" die Resource in der EXE nehmen soll und wie behandel ich meinen SignCode, wenn ich die CAPICOM.DLL mit in die Resourcen packe? Hat da jemand ein paar Vorschläge?

    Vielen Dank und beste Grüße
    Toorms
    @Toorms Ressourcen sind static / Shared, wenn Du den Namespace der DLL mit nem Punkt hinschreibst, sollte die IDE Dir den Inhalt auflisten.
    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!
    @Toorms Dies ist ein Beispiel, ich weiß nicht, wie die Macher dieser DLL das gelöst haben, ich habe es so gelöst:


    DLL

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Public Class Ressource
    3. Private Sub New()
    4. End Sub
    5. Public Shared ReadOnly Property Image1() As Bitmap
    6. Get
    7. Return My.Resources.Glaskugel
    8. End Get
    9. End Property
    10. End Class
    Form

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Me.BackgroundImage = ClassLibrary1.Ressource.Image1
    4. End Sub
    5. End Class
    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!
    Pardon für die verspätete Antwort.

    Das Image wird dann doch aber als Object behandelt und auch passend geladen (indem Fall in BackgroundImage, welches ein Bild erwartet). Was ist denn aber, wenn ich ein Zertifikat habe, welches in einer anderen Methode als String erwartet wird.

    Als Beispiel habe ich Mehtode "CodeSign" und CodeSign brauch das Zertfikat und Password als String. Würde dann ja so aussehen:

    VB.NET-Quellcode

    1. CodeSign(Application.StartupPath & "\certificate.pfx", "<PASSWORD>")


    Wie setze ich aber den ersten String zu dem, dass er die Datei aus den Ressourcen dafür nehmen kann? Ich hoffe, ich habe mich nicht all zu komisch ausgedrückt. Beste Grüße und einen tollen Start in die Woche. :)

    Toorms schrieb:

    Das Image wird dann doch aber als Object behandelt
    Nö. Es wird als Image bzw. Bitmap behandelt.
    Wenn Du einen String brauchst, muss in der DLL ein String drinne sein, den kannst Du dann so auch als String auslesen.
    Sofern es sich um eine .NET-konforme DLL handelt.
    Was isn das für eine DLL?
    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!

    Toorms schrieb:

    COM Resource
    Wie hast Du die in Dein Projekt eingebunden?
    Machma vielleicht ein kleines Testprojekt und häng das an (ZIP, ohne bin und obj).
    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!
    Wenn man die capicom.dll vorher per regsvr32.exe capicom.dll registriert, dann brauch man diese DLL nicht extra im Verzeichnis der kompilierten Exe zu haben. Ich muss diese DLL Datei aber quasi immer im Projekt dabei haben, da auf dem Rechner, wo die Anwendung das erste mal läuft capicom erst noch registriert werden muss.

    Ich habe ein Beispiel mal hochgeladen, wie es verwende. Wenn die capicom nicht registriert ist auf dem Rechner, kann auch nicht kompiliert werden.

    Besten Dank und viele Grüße!
    Dateien
    • Debug.7z

      (151,65 kB, 104 mal heruntergeladen, zuletzt: )
    OHa.
    Ich werde auf meinem Rechner nix registrieren um das nachzuvollziehen.
    Das müssen wir so lösen. Sorry.
    Warum bist Du der Meinung, dass in dieser DLL Ressourcen enthalten sind?
    Hast Du eine Interface-Beschreibung dazu?
    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 schrieb:

    Warum bist Du der Meinung, dass in dieser DLL Ressourcen enthalten sind?


    Das bin ich per se nicht. Stelle ich die Frage vielleicht ein wenig anders. Undzwar ob ich die DLL aus den Resourcen heraus aufrufen kann, sodass ich sie wie in einem beispielsweise Process.Start() verwenden kann?

    VB.NET-Quellcode

    1. Process.Start("regsvr32.exe","<Hier-meine-capicom-resource(My.Resources.Capicom?!)>")


    Es ist ja erst einmal nur die Frage, ob mein Vorhaben überhaupt funktioniert, da ich mit den Resourcen in VS noch nicht all zu viel gearbeitet habe :)
    @Toorms Langsam aber sicher kommt Dein Plan ans Tageslicht.
    Eleganter ist es, wenn Du den Registry-Key exportierst und dann diesen zum Registrieren ausführst.
    Das geht dann ohne diese DLL.
    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!