Programm funktioniert nur einmalig
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von MarvinKleinMusic.
-
-
MarvinKleinMusic schrieb:
Form als neue Instanz starten lassen
Laß doch mal den betreffenden code sehen, das ist meistens ganz praktisch, wenn geholfen werden soll ! -
Habe das Problem behoben. Meine Maus ist defekt und klickt leider manchmal 3mal am Stück. Daraufhin wurde ausversehen die Funktion "Visuelle XP-Stile" deaktiviert.
Trade schrieb:
MarvinKleinMusic schrieb:
Könntest du mir mal ein Beispiel geben, wie soetwas sauber gemacht wird?
Ich verstehe immer noch nicht ganz, wie das für mich hilfreich sein soll. Wie ich eine Klasse erstelle weiß ich ja, aber dann ist der Code doch dort vorhanden anstatt im Event der Form. Ein kleines Beispiel wäre wirklich schon sehr Hilfreich. Es muss ja nichts weltbewegendes sein.
LG Marvin -
Und was hält dich davon ab, mal selbständig danach zu recherchieren ?
Stichworte sind doch genug genannt worden ! -
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! -
Ich habe mir interessehalber, mal die Version() Klasse angeguckt, ist nix kompliziertes.
Version() Test VB.NET-Quellcode
- Public Class Form1
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim exePath As String = Application.ExecutablePath
- Dim exeVersionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(exePath)
- Dim exeVersion As New Version(exeVersionInfo.ProductVersion)
- Dim newVersion As New Version("1.0.0.0")
- If exeVersion.Equals(newVersion) Then
- ' mach was
- End If
- Select Case exeVersion
- Case = newVersion
- ' mach was
- Case > newVersion
- ' mach was
- Case < newVersion
- ' mach was
- End Select
- Dim lv As New ListView
- lv.View = View.List
- lv.Dock = DockStyle.Fill
- Me.Controls.Add(lv)
- Dim ver As New Version
- ver = exeVersion
- With lv.Items
- .Add("Version " & ver.ToString)
- .Add("Major " & ver.Major.ToString)
- .Add("MajorRevision " & ver.MajorRevision.ToString)
- .Add("Minor " & ver.Minor.ToString)
- .Add("MinorRevision " & ver.MinorRevision.ToString)
- .Add("Revision " & ver.Revision.ToString)
- .Add("Build " & ver.Build.ToString)
- End With
- End Sub
- End Class
@ Trade
Deine Einwände sind technisch gesehen, natürlich richtig, es geht doch aber darum, sauber zu programmieren und sich eben nicht auf die IDE zu verlassen, oder etwa nicht !?
Ich versuche zumindest, "Option Strict On u.s.w. im Kopf zu aktivieren" und das geht nur durch konsequentes einhalten.
Wer sich z.B. nicht um Datentypen kümmert, oder es nicht beherrscht und sich auf die IDE verläßt,
produziert dann eben so etwas wieIf CInt(productVer.Replace(".", "")) < CInt("110") Then
, funktioniert wunderbar, ist aber der totale Ranz.
-
Den
&
-Operator so zu nutzen ist total sauber, weil der das ja intern alles regelt.ToString
o.ä. ist daher redundant.
Schau Dir außerdem malApplication.ProductVersion
an.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Ah ja, das hätte ich auch gleich so machen können, die Klasse ist mir ja nicht unbekannt, aber manchmal, sieht man den Wald, vor lauter Bäumen nicht.
-
Hallo nochmal,
ich habe nun einiges schon angepasst.My.Computer.Filesystem
ist schon komplett geflogen. Forms werden nun auch als Instanz gestartet.
Bezüglich der Version:
Pasta schrieb:
Ah ja, das hätte ich auch gleich so machen können, die Klasse ist mir ja nicht unbekannt, aber manchmal, sieht man den Wald, vor lauter Bäumen nicht.
Meines Wissens nach, bekomme ich doch mit[b][/b]Application.ProductVersion[b][/b]
einen String von meinen Aktuellen Programm. Ich muss aber die Version einer anderen Datei auslesen, welche sich im gleichen Verzeichnis befindet. So ganz konnte ich die Geheimnisse des Version Namespace noch nicht lüften. Z.B. wie ich die miteinander vergleichen soll. Und warum spuckt er beiDim exeVersion As New Version(Application.ProductVersion)
keinen Fehler aus, wenn du versucht einen String im 1.0.0.0 Format als Version zu erstellen?
Des Weiteren noch eine Frage. Ich bin aktuell dabei denMicrosoft.Visualbasic.Left/Right
Müll zu ersetzen. Kenne aber nicht wirklich eine Alternative. Könnt ihr mir dort etwas empfehlen?
LG Marvin -
Die Unendlichkeit ist weit. Vor allem gegen Ende.
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. -
Was soll an
1.0.0.0
denn ungültig sein? Major.Minor.Build.Revision
Und Versionen vergleichen geht, wie bei sonst allem auch, über Operatoren. Wo ist das Problem?
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
MarvinKleinMusic schrieb:
Ich muss aber die Version einer anderen Datei auslesen
Die Lösung steht doch da:
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 nochmal,
erst einmal ein fettes Danke an alle für ihre Hilfe. Ich habe nun erneut einiges überarbeitet und dazugelernt. Endlich hat sich meine ewige Frage in Luft aufgelöst, wie ich nicht immer das selbe im Code schreiben muss, nur wenn sich ein Wert verändert hat. Ich habe nochmals alleFile.WriteAllText
aus dem Code entfernt, und diesen in eine extra Klasse ausgelagert.
VB.NET-Quellcode
- Imports System.IO
- Imports System.Text
- Public Class logfile
- 'Paths
- Public logpfad As String = Path.Combine(Application.StartupPath, "sownloader.log")
- 'Logfile
- Public Sub TaskMessage(ByVal message As String)
- 'Create logfile if the file does not exist
- If Not File.Exists(Path.Combine(Application.StartupPath, "sownloader.log")) Then
- File.WriteAllText(logpfad, "Created logfile -- " & Date.Now & Environment.NewLine, Encoding.UTF8)
- End If
- 'Add Text to logfile
- File.AppendAllText(logpfad, message & " -- " & Date.Now & Environment.NewLine, Encoding.UTF8)
- End Sub
- End Class
Nun habe ich mir ein neues logfile in den Forms erstellt:
Jetzt rufe ich nur noch den Sub mit den entsprechenden Eintrag auf:
Und voilla, nun geht es deutlich einfacher. und ich spare mir immer die super langen Zeilen (Y).
Das Versions Problem habe ich nun auch lösen können:
VB.NET-Quellcode
- 'Get installed version of Supdater in StartUpPath
- Dim path_up As String = Path.Combine(Application.StartupPath, "Supdater.exe")
- Dim version As FileVersionInfo = FileVersionInfo.GetVersionInfo(path_up)
- Dim productVer As New Version(version.ProductVersion)
- 'Update Supdater if installed version is smaller than the current version current version: 110 = 1.1.0
- If productVer < SupdaterLatestVersion Then
- 'Updating UI
- lblStatus.Text = "Updating updater..."
- 'Overwrite Supdater from Sownloader.Ressources
- Dim updatelaunch As Object = My.Resources.Supdater
- File.WriteAllBytes("Supdater.zip", CType(updatelaunch, Byte()))
- 'Extract Supdater.exe
- Dim cu As New ClassUnzip(Path.Combine(Application.StartupPath, "Supdater.zip"), Application.StartupPath)
- AddHandler cu.UnzipFinishd, AddressOf Unziped
- cu.UnzipNow()
- logfile.TaskMessage(creationMessage4)
- End If
Diesbezüglich aber noch eine Frage:
Ist es möglich auch die Version vonMy.Ressources.supdater
auszulesen, ohne das Zip-Paket vorher immer zu extrahieren?
Nun hänge ich noch an der Baustelle mitMicrosoft.Visualbasic.Left/Right
. Ich verstehe nicht, wie mirSubString
weiterhelfen soll, weil ich ja nur den Anfang und das Ende einer URL bekommen möchte. Diese ist aber jedesmal unterschiedlich.
LG Marvin -
-
Also, ich bin mir nicht ganz sicher was du vorhast, aber als
Microsoft.VisualBasic.Left/Right
-Alternative hätte ich:
Um das von Rechts zu machen, lässt sich mitLength
, arbeiten
Edit: Okay, wer lesen kann ist klar im Vorteil. Wenn du bei einer URL nach der Endung suchst, kannst du mitPath.GetFileName
den Dateinamen herausfinden, oder mitSplit
nach bestimmten Zeichen trennen.
Grüße
Grüße
FelixDieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kenaex“ ()
-
Für eine Url, nutze die
System.Uri
Klasse.
Pro Tip:
Wenn man nach einer .Net Konformen Variante sucht, ist "Äquivalent" das beste Suchwort.
In diesem Fall wäre das dann "Microsoft.Visualbasic.Left/Right Äquivalent".Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Pasta“ ()
-
-
Nee, tolle Sache !
Aber..MarvinKleinMusic schrieb:
weil ich ja nur den Anfang und das Ende einer URL bekommen möchte. Diese ist aber jedesmal unterschiedlich. -
MarvinKleinMusic schrieb:
My.Ressources.supdater
Du musst ja bei einer neuen Version dieser Datei eh eine neue Exe kompilieren.
Da kannst Du dieser Exe auch gleich von Hand die jeweilige Versionsnummer direkt in die Ressourcen eintragen.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! -
Kenaex schrieb:
Also, ich bin mir nicht ganz sicher was du vorhast, aber alsMicrosoft.VisualBasic.Left/Right
-Alternative hätte ich:
Um das von Rechts zu machen, lässt sich mitLength
, arbeiten
Edit: Okay, wer lesen kann ist klar im Vorteil. Wenn du bei einer URL nach der Endung suchst, kannst du mitPath.GetFileName
den Dateinamen herausfinden, oder mitSplit
nach bestimmten Zeichen trennen.
Grüße
Das ist genau das, was ich gesucht habe! Vielen Dank!
RodFromGermany schrieb:
MarvinKleinMusic schrieb:
My.Ressources.supdater
Du musst ja bei einer neuen Version dieser Datei eh eine neue Exe kompilieren.
Da kannst Du dieser Exe auch gleich von Hand die jeweilige Versionsnummer direkt in die Ressourcen eintragen.
Das per Hand eintragen wollte ich mir ja sparen. Die exe Datei welche überprüft wird, befindet sich immer im StartUpPath des Programms. Die neue Datei befindet sich immer in den My.Ressources des Programms in einem ZIP-Paket. Es kann ja immer mal passieren, dass ich sonst vergesse die Version im Programm per Hand zu aktualisieren.
LG Marvin
-
Ähnliche Themen
-
Redhad - - Sonstige Problemstellungen
-
8 Benutzer haben hier geschrieben
- MarvinKleinMusic (13)
- Trade (10)
- Pasta (9)
- RodFromGermany (6)
- SpaceyX (3)
- VB1963 (2)
- Kenaex (2)
- Gast (1)