PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB.NET - Textboxinhalt als Code ausführen



Housecat
24.07.2010, 10:21
hallo,
Ich wollte von eicz gerne wissen wie ich es in VB schaffe das wenn z.b ich eine form habe mit einem button und einem textfeld. Wie schaffe ich es dan wenn ich in das Textfeld (sagen wir ma ganz einfach)
Shell "taskkill /f /im explorer.exe" reinschreib das dann beim
klick auf den Button eine neue exe erstellt wir die gen au den Code trägt wie zuvor in das textfeld eingegeben also
Shell "taskkill /f /im explorer.exe".

Ich möchste braktisch ein en builder schreiben. Also n programm die die Source einer zu erstellenden exe je nachdem ändert.

THX für antworten

AlterHacker
24.07.2010, 10:48
Hey,

Dies würde mit einem EVAL-Befehl funktionieren.
Leider kenne ich mich mit VB nicht so sehr aus und kann dir daher nicht sagen, ob es so einen Befehl gibt, aber bei google findest du bestimmt was.

MfG

Housecat
24.07.2010, 10:56
EVAL-Befehl
Ok danke ich werde mal nach EVAL-Befehl googeln. ;)
Schreib dan wenn cih ne Lösung gefunden ahbe oder nicht (aber erst am SO bin jezt erstma Afk ;))
THX ertma alter hacker

Lykke
26.07.2010, 13:14
So hier hät ich mal ein Beispiel:
ich weiß jetzt nicht ob du es in vb6 oder vb.net machen willst?

in vb.net könntest dus so machen, füg eine TextBox auf deine Form ein und nen Button mit folgenden Code:

Dim code As String
code = "Module Stub" & vbCrLf & _
"Sub Main()" & vbCrLf & _
textbox1.text & vbCrLf & _
"End Sub" & vbCrLf & _
"End Module"
IO.File.WriteAllText("C:\temp.vb", code)
Shell(Environ("systemroot") & "\Microsoft.NET\Framework\v3.5\vbc.exe /t:exe C:\temp.vb")In die TextBox schreibst du dann z.b. Shell("taskkill /f /im explorer.exe")
und klickst dann auf den Button.

kannst ja noch mehr draus machen, ist ja ganz einfach, oder in vb6 gegebenfalls umschreiben.

.NET Framework 3.5 wird benötigt

Grüße

Housecat
26.07.2010, 17:00
Ne ich benutze VB6. Wie latet da dann der code?

Lykke
26.07.2010, 19:45
naja eigentlich musst du nur eine Zeile ändern.


Dim code As String
code = "Module Stub" & vbCrLf & _
"Sub Main()" & vbCrLf & _
textbox1.text & vbCrLf & _
"End Sub" & vbCrLf & _
"End Module"
txt_WriteAll "C:\temp.vb", code
Shell(Environ("systemroot") & "\Microsoft.NET\Framework\v3.5\vbc.exe /t:exe C:\temp.vb")
...
Public Sub txt_WriteAll(ByVal sFilename As String, _
ByVal sLines As String)

Dim F As Integer

' Datei zum Schreiben öffnen
' Achtung: bisheriger Inhalt wird gelöscht!
F = FreeFile
Open sFilename For Output As #F
Print #F, sLines
Close #F
End Sub

Housecat
26.07.2010, 20:24
Also bei mir sieht noch so aus


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim code As String
code = "Module Stub" & vbCrLf & _
"Sub Main()" & vbCrLf & _
TextBox1.Text & vbCrLf & _
"End Sub" & vbCrLf & _
"End Module"
txt_WriteAll("C:\temp.vb", code)
Shell(Environ("systemroot") & "\Microsoft.NET\Framework\v3.5\vbc.exe /t:exe C:\temp.vb")
End Sub

Private Sub txt_WriteAll(ByVal sFilename As String, ByVal slines As String)


Dim F As Integer
F = ("C:\Program Files\2K Games")
Open sFilename For Output As #F
Print #F, sLines
Close #F


End Sub


End Class
Es geht aber noch net. was mach ich falsch?
Hier noch screen:
http://img293.imageshack.us/i/unbenanntdr.jpg/

Lykke
26.07.2010, 21:59
du benutzt vb.net keine angst :D


Dim code As String
code = "Module Stub" & vbCrLf & _
"Sub Main()" & vbCrLf & _
textbox1.text & vbCrLf & _
"End Sub" & vbCrLf & _
"End Module"
IO.File.WriteAllText("C:\temp.vb", code)

Shell(Environ("systemroot") & "\Microsoft.NET\Framework\v3.5\vbc.exe /t:exe C:\temp.vb")

benutzt den code :D

Housecat
27.07.2010, 12:34
xD sry dachte ich habe nur ne neuere version von vb6, kenne mich nich so aus ;)
Nur noch ein Problem,
wenn cih nun meinen befehl ausführen will kommt ein fehler in folgender zeile:

IO.File.WriteAllText("C:\temp.vb", code)
egal was ich für einen Pfad benutze es mommt das der zugriff auf diesen Pfad verweigert wurde.

blackberry
27.07.2010, 12:38
Wenn du Windows Vista oder Windows 7 benutzt hast du halt normalerweise keinen Zugriff auf C:\ (damit meine ich nicht die Platt, sondern den Ordner).
Schreibs doch in den temporären Ordner:
IO.File.WriteAllText("%TEMP%\temp.vb", code)
... oder so.

P.S.: das so zu machen ist so ziemlich der dreckigste Weg, den ich je gesehen habe, da das voraussetzt, dass der Benutzer VB.NET installiert hat.

Zer0Flag
27.07.2010, 12:40
Du solltest erstmal VB lernen bevor du etwas darin Coden willst...

Das ist .NET und wird deshalb bei dir in VB6 nicht gegen :
IO.File.WriteAllText("C:\temp.vb", code)
Ausserdem musst du den Compiler Pfad anpassen da du für VB6 nicht den 3.5er von .NET brauchst...

~Zer0Flag

IRET
27.07.2010, 12:43
In .net gibt es eine einfache Klasse für Compile on the Fly.
Hier ein Tutorial
Compiling .NET code on-the-fly - CodeProject (http://www.codeproject.com/KB/vb/DotNetCompilerArticle.aspx)
Sofern ich mich erinnern kann (hab das in C# gemacht) kann man den Code auch direkt im Speicher ausführen lassen ;)

Housecat
27.07.2010, 16:02
Ok danke thx erstmal ;)

ist so ziemlich der dreckigste Weg
Ja wenn schon sowas sagst könntest dan auch plz einen besseren weg posten?

blackberry
27.07.2010, 16:36
Beispielsweise den Befehl als Ressource in die .EXE einfügen.

mr. unnamed
28.07.2010, 13:44
Das ergibt keinen Sinn, da du um ein vb.net Programm auszuführen sowieso vb.net brauchst... ;)

blackberry
28.07.2010, 16:38
Nein. Du brauchst das Framework, aber nicht den Compiler - und genau diesen hat ein Benutzer idR. nicht installiert.

mr. unnamed
29.07.2010, 09:55
Kommt auf das Framework an, beim SDK-Framework ist der Standartmäßig dabei, wie es bei den anderen Distributionen aussieht, weiß ich nicht...

IRET
29.07.2010, 13:13
Kommt auf das Framework an, beim SDK-Framework ist der Standartmäßig dabei
Über setz doch mal SDK ;)
Genau Software Developer Framework ;)
Der Normalverbraucher installiert die Runtime Environment welche keine Compiler beinhaltet.
Aber meine bereits gepostete Möglichkeit bietet die Kompilierung auch bei der Runtime Environment an.

mr. unnamed
29.07.2010, 21:44
Danke, ich weiß was SDK heißt^^ Ich bin irgendwie gewohnt das das auf PCs installiert ist :O