VisualBasic vb210 Programm soll sich selbstständig speichern

Irgendwie

Cadet 3rd Year
Registriert
Jan. 2012
Beiträge
40
Hey Leute,
ich wollte mal fragen, ob es möglich ist, dass sich ein Programm selbstständig an einen anderen Ort speichert.
Bsp: Programm läuft und die .exe liegt auf dem desktop, kann sich das Programm selbstständig auf C:\ speichern oder ist sowas unmöglich?
 
Willst du es kopieren oder verschieben?
Kopieren ist recht einfach: Mit Assembly.GetEntryAssembly() bekommst du das Einstiegs-Assembly (deine .exe). Mit der CodeBase-Eigenschaft kommst du dann an den Pfad. Dann weißt du wo die .exe liegt und musst sie nur kopieren.
Verschieben ist schwieriger, weil du die Datei nicht während der Laufzeit verschieben kannst. Du könntest aber z. B. beim Beenden einen eigenen Prozess starten, der die alte .exe löscht.

Was hast du eigentlich genau vor? Vielleicht gibt es ja eine bessere Lösung als eine .exe zu verschieben?
 
Warum, willst du nen Virus basteln, der sich selbständig vervielfältigt?;)

Solange dein Prozess Schreibberechtigung im jeweiligen Ordner hat, wird das mit VB schon zu bewerkstelligen sein.
Musst ja auch nicht gerade direkt auf C:\ speichern.
 
Nein kopieren wäre auch in Ordnung.
Zu dem Verwendungszweck: Ich weiß es selbst nicht, ich soll das für einen Freund machen, der mir das selbst nicht verraten wollte, aber ich kann es, wenn ich es weiß nach posten.

Ich les mir das alles mal durch und probiers dann mal aus und meld mich dann gleich wieder (:
Ergänzung ()

nein, wenn ich einen Virus machen wollte, würd ichs in die Registry einschreiben, aber nicht an einen anderen Ordnerpfad^^
Ergänzung ()

Also mit Assembly.GetEntryAssembly() bekomme ich die .exe? Aber wie "bekomme" ich sie bzw. als was?
Ausgeben kann man es mal nicht, da man es nicht in String umwandeln kann.
Also meine Frage ist, was bekomme ich da zurück bzw. kann ich mir das irgenwie ausgeben lassen?

Mit der CodeBase-Eigenschaft bekomm ich eine .dll zurück und nicht den Pfad der .exe.

So ganz blick ich noch nicht durch^^
Ergänzung ()

Ok, wie ich den Namen, der .exe bekomme hab ich jetzt, aber den pfad bekomme ich noch nicht raus (:
 
Stack Overflow sagt dazu:

1) Application.ExecutablePath

2) System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

3) System.Reflection.Assembly.GetExecutingAssembly().Location
Ergänzung ()

Irgendwie schrieb:
Ergänzung ()

Also mit Assembly.GetEntryAssembly() bekomme ich die .exe? Aber wie "bekomme" ich sie bzw. als was?
Ich habs mir grad in VS angesehen, du bekommst doch von Assembly.GetEntryAssembly() alles, was du willst, sogar nen Filestream!

Ich fürchte, das Hauptproblem hier ist, dass du einfach überhaupt nicht programmieren kannst :D
 
Assembly.GetEntryAssembly() gibt dir ein Assembly-Objekt zurück, das die .exe repräsentiert. Dieses Objekt wiederum hat eine Eigenschaft "CodeBase", die dir den Pfad zurück gibt:
Code:
Dim exePfad As String = Assembly.GetEntryAssembly().CodeBase
 
Habs dann eh noch rausbekommen, nur in der Beschreibung des Datentyps stand: "kann nicht in string umgewandelt werden"

Nur wollte ich nichts mehr posten, da keiner eine antwort gab.

Aber kann mir jemand den fehler in diesem Code sagen? Er kopiert das nicht...
PHP:
Dim Ad As System.Reflection.Assembly = Assembly.GetEntryAssembly()
        Dim adnew = Ad.ToString

        adnew = adnew.Remove(adnew.IndexOf(","))

        Dim path = Application.StartupPath & "\" & adnew & ".exe"
        My.Computer.FileSystem.CopyFile(path, "C:\")
 
Fehlende Rechte? auf C:\ darf man normalerweise nicht einfach so schreiben. Rückgabewerte prüfen ist nicht
gute Praxis, weil es so Hipsterscheiß ist wie OOP, sondern weil es in der Regel wirklich sinnvoll ist und einem
weiter hilft..
 
CopyFile hat keinen Rückgabewert.

Und egal welchen Pfad ich angebe, er tut nichts, auch wenn ich die exe als admin starte.
Ergänzung ()

Aber falls du meinst die Exception abfangen kommt " Der Vorgang konnte nicht abgeschlossen werden, da bereits ein Verzeichnis im Pfad C:\ vorhanden ist. "
Was aber keinen Sinn ergibt, da ich ja kein Verzeichnis kopiere ?!
 
Dass copyFile keinen Rückgabewert hat, ist ja auch zu erwarten. Was sollte es auch zurückgeben? Höchstens ein boolean wäre denkbar, wenn die Sprache keine Exceptions unterstützen würde (true für Erfolg, false für Nichterfolg).

Eine kurze Googlesuche hat ergeben, dass es wahrscheinlich

My.Computer.FileSystem.CopyFile(path, "C:\dasProgramm.exe")

heißen muss.
 
Zurück
Oben