Visual Basic Programm welches ein Programm buildet?

... komplette Frage anzeigen

2 Antworten

Vorrausgesetzt, du benutzt Visual Basic .NET, müsste sowas in der Art das sein, was du suchst:

Imports System.CodeDom.Compiler
Imports Microsoft.VisualBasic
Imports System.IO

Public Module RuntimeCompiler
Public Function CompileVB(Code As String, OutputFileName As String) As Void
Dim Provider As VBCodeProvider = new VBCodeProvider()
Dim Parameters As CompilerParameters = new CompilerParameters()
Parameters.GenerateInMemory = False
Parameters.GenerateExecutable = True
Dim Results As CompilerResults = provider.CompileAssemblyFromSource(Parameters, Code)
If Results.Errors.Count > 0 Then
Dim Errors As String = ""
For I As Integer = 0 To Results.Errors.Count
Errors = Errors & Results.Errors(I).ToString()
Next
Throw New Exception(Errors)
End If
File.Copy(Results.PathToAssembly, OutputFileName)
End Function
End Module

Und an der Stelle im Code, wo die Exe generiert werden soll:

Dim Code As String
'Dann natürlich noch den Code in die Variable packen ;)
Dim OutputFileName As String = "C:\\Foo\\Bar.exe"
RuntimeCompile.CompileVB(Code, OutputFileName)
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von JaskiHax
07.09.2016, 13:37

Danke danke danke!!! Ich werde es ausprobieren. :)

0
Kommentar von JaskiHax
07.09.2016, 14:12

Ja vielen Dank. Das war mir bekannt :) Echt toll, darf ich fragen woher sie das wissen?

0
Kommentar von JaskiHax
07.09.2016, 15:20

Und weißt du wie man zu der Datei noch Ressorcen (DLLs) hinzufügen kann?

0
Kommentar von Isendrak
07.09.2016, 15:44

UPDATE: Ich hab den Code für den "RuntimeCompiler" noch ein wenig überarbeitet:

Imports System.IO
Imports System.CodeDom.Compiler
Imports Microsoft.CSharp
Imports System.Collections.Generic
Imports System.Reflection

Public NotInheritable Class RuntimeCompiler
Private Shared Function Compile(Code As String, Provider As CodeDomProvider, OutputAssembly As String, Library As Boolean, References As List(Of String), EmbeddedResources As List(Of String)) As Assembly
Dim Parameters As New CompilerParameters()
If OutputAssembly IsNot Nothing Then
Parameters.OutputAssembly = OutputAssembly
End If
If References IsNot Nothing Then
For Each Reference As String In References
Parameters.ReferencedAssemblies.Add(Reference)
Next
End If
If EmbeddedResources IsNot Nothing Then
For Each EmbeddedResource As String In EmbeddedResources
Parameters.EmbeddedResources.Add(EmbeddedResource)
Next
End If
Parameters.GenerateInMemory = True
Parameters.GenerateExecutable = Not Library
Dim Results As CompilerResults = Provider.CompileAssemblyFromSource(Parameters, Code)
If Results.Errors.Count > 0 Then
Dim Errors As String = ""
For Each [Error] As CompilerError In Results.Errors
Errors += [Error].ToString() + vbLf
Next
Throw New Exception(Errors)
End If
Return Results.CompiledAssembly
End Function

Public Shared Function CompileVB(Code As String, Optional OutputAssembly As String = Nothing, Optional Library As Boolean = False, Optional References As List(Of String) = Nothing, Optional EmbeddedResources As List(Of String) = Nothing) As Assembly
Return Compile(Code, New VBCodeProvider(), OutputAssembly, Library, References, EmbeddedResources)
End Function

Public Shared Function CompileCSharp(Code As String, Optional OutputAssembly As String = Nothing, Optional Library As Boolean = False, Optional References As List(Of String) = Nothing, Optional EmbeddedResources As List(Of String) = Nothing) As Assembly
Return Compile(Code, New CSharpCodeProvider(), OutputAssembly, Library, References, EmbeddedResources)
End Function
End Class
0

Das funktioniert etwa so: In eine Quellcodedatei wird der Code geschrieben, dann wird per RunPE (eine Datei aus einem Byte-Array ausführen) der Compiler bzw. Linker ausgeführt und produziert dann die ausführbare Datei.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von JaskiHax
06.09.2016, 18:55

Eine Frage, wie kann ich RunPE in VB.net benutzen?

0
Kommentar von spriday
06.09.2016, 19:02

@JaskiHax Habe ich beim ersten mal googlen gefunden. Vielleicht solltest du dich erstmal im Internet informieren und dann Fragen stellen.

0
Kommentar von JaskiHax
06.09.2016, 19:14

@spriday, wenn man aber genauer guckt ist das alles nur fake. Bitte ich brauche dringend Hilfe! Ich habe keine Ahnung was die alle von mir wollen :'(

0
Kommentar von spriday
07.09.2016, 07:06

@JaskiHax Wenn man ganz genau guckt ist das kein fake! Wie willst du, der RunPE nichtmal kennt, wissen, dass das "fake" ist?

0