Anwendung aus den Resourcen starten

    • VB.NET

    Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Systems.exe.

      Anwendung aus den Resourcen starten

      Hi
      So startet man eine Anwendung aus den Resourcen:

      VB.NET-Quellcode

      1. Private thdAppThread As Threading.Thread
      2. Private Sub StartApp()
      3. Dim aAssembly As Assembly = Assembly.Load(My.Resources.MeineAnwendung)
      4. thdAppThread = New Threading.Thread(AddressOf StartAssemblyApplication)
      5. thdAppThread.Start(aAssembly)
      6. End Sub
      7. Private Sub StartAssemblyApplication(ByVal Assembly As Assembly)
      8. Assembly.EntryPoint.Invoke(Nothing, BindingFlags.CreateInstance, Nothing, New Object() {new String() {}}, Nothing)
      9. End Sub


      Update (2016-05-12): Ggf. sollte man diese in einer neuen AppDomain starten. Diese lässt sich über AppDomain.CreateDomain("domäne") erzeugen.

      Gruß
      ~blaze~

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

      Ich find meine Lösung elegant ;)...

      @Mad Andy:
      Naja hätt ich vielleicht machen sollen ^^

      Was noch anzumerken wäre, ist, dass die

      VB.NET-Quellcode

      1. Sub Main(ByVal args() As String)

      wirklich so existieren muss. Wenn man seine eigene erstellt, dann kommt ein Fehler. Sonst wird die Sub Main automatisch generiert und sieht so aus.

      Für die anderen muss man dann das anpassen wo hier "Alle Parameter" steht:

      VB.NET-Quellcode

      1. Assembly.EntryPoint.Invoke(Nothing, BindingFlags.CreateInstance, Nothing, New Object() {"Alle Parameter"}, Nothing)


      Dabei sollte man aufpassen, dass alle Arrays gefüllt sein sollten. (Deshalb Array.CreateInstance oben)

      Gruß
      ~blaze~

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

      Heyho.. ^^

      Ich interressiere mich für das Starten einer Anwendung aus den Ressourcen da es mir so möglich ist ein Antihack an das Spiel zu binden.
      Jetzt habe ich ein problem das "Der Typ "Assembly" ist nicht definiert" beim debuggen auftaucht..
      Ich weiß das es an den Imports liegt jedoch kann ich einfach nicht finden welcher Import mir nun fehlt..

      Folgende Imports habe ich bereits:

      Imports System.IO
      Imports System.IO.Compression
      Imports System.Media
      Imports System.Threading
      Imports System.Data
      Imports System.Web
      Imports System
      Imports System.Net
      Einfach bei

      VB.NET-Quellcode

      1. Assembly.EntryPoint.Invoke(Nothing, BindingFlags.CreateInstance, Nothing, New Object() {Array.CreateInstance(GetType(String), 0)}, Nothing)

      die Parameter übergeben:

      VB.NET-Quellcode

      1. Assembly.EntryPoint.Invoke(Nothing, BindingFlags.CreateInstance, Nothing, New Object() {New String(){"parameter-array"}}, Nothing)

      Kommt aber auf den Einstiegspunkt an. In meinem Fall nimmt er args() As String bei der Main-Prozedur.
      Steht übrigens schon ein paar Posts unter dem Startpost.

      Gruß
      ~blaze~
      Was steht in der InnerException? Ich tippe auf Application.EnableVisualStyles() oder dergleichen, die nicht mehr aufgerufen werden können, nachdem die 1. Form erzeugt wurde. Abhilfe verleiht das anlegen einer neuen Anwendungsdomäne (siehe AppDomain.CreateDomain) oder das Aufrufen des Einstiegspunktes in einer manuell definierten Sub Main (siehe dazu auch den Tipp von ErfinderDesRades). Wenn's nicht daran liegt, poste das doch bitte.
      Übrigens ist es nicht empfehlenswert, das ganze zum Erhöhen der Sicherheit o.Ä. zu verwenden, da man Resourcen auch einfach aus dem Programm auslesen kann.

      Gruß
      ~blaze~
      Hallo Leute !
      Ich habe eine Frage zu diesem Code
      ~blaze~

      VB.NET-Quellcode

      1. Private thdAppThread As Threading.Thread
      2. Private Sub StartApp()
      3. Dim aAssembly As Assembly = Assembly.Load(My.Resources.MeineAnwendung)
      4. thdAppThread = New Threading.Thread(AddressOf StartAssemblyApplication)
      5. thdAppThread.Start(aAssembly)
      6. End Sub
      7. Private Sub StartAssemblyApplication(ByVal Assembly As Assembly)
      8. Assembly.EntryPoint.Invoke(Nothing, BindingFlags.CreateInstance, Nothing, New Object() {Array.CreateInstance(GetType(String), 0)}, Nothing)
      9. End Sub


      Ist es auch möglich das dieses Programm die im Speicher aus gestartet wurde, Lauf fähig bleibt, wenn man das andere Programm "von dem es erstellt wurde" Beendet ?

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „tommy“ ()

      @tommy Willkommen im Forum. :thumbup:
      Da dieser Code nicht von Dir ist, markiere ihn bitte als Zitat von @~blaze~ :!:
      Wie lange benötigst Du, um selbst herauszubekommen, ob das Programm am Leben bleibt?
      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!
      Hallo RodFromGermany !
      Ich verstehe nicht ganz deine Frage.
      Wenn du meinst wann das Programm beendet wird, dann bis der user selbst das Programm beendet.
      oder meinst du wie es mir herausbekommen habe das dieses Programm nicht mehr läuft.
      Aufgefallen ist es mir gleich nach dem ich das Programm beendet habe, von dem es erstellt wurde.

      Ich denke mal es hängt mit dem Threading zusammen
      Ist es möglich statt Threading ein eigenen Process zunehmen, ohne das es erst die Datei von Resscource entpackt werden muss und als Process.start() auszuführen?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tommy“ ()