VB: Erstellen einer lauffähigen .exe

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von harmenrabb.

    VB: Erstellen einer lauffähigen .exe

    Hallo,

    ich hoffe ich habe das richtige Unterforum gewählt für meine Frage.

    Ich programmiere mir (für meine private Nutzung) von Zeit zu Zeit kleine Programme die mir bei bestimmten Sachen helfen. Zurzeit habe ich bei einem dieser Programme das Problem, dieses in eine auf einem anderen PC lauffähige .exe umzuwandeln. Zurzeit benutze ich VB 2010 Express unter Windows 10, da ich das als ich letzztes Jahr mal die erste Idee für eines meiner Programme hatte nach kurzer google-Suche gefunden hatte.

    Mein Programm hat auch keine exotischen Funktionen oder sonstigen Schnittstellen, vom Prinzip besteht es im wesentlichen aus einem Web-Browser-Steuerelement und ein paar Buttons und Textfeldern/Richtext-Boxen, da ich es verwende um bestimmte Daten von einer Webseite auszulesen und auszuwerten, was auch problemlos funktioniert. Also keine besonderen Steuerelemente sondern alles Standard-Sachen die in VB direkt enthalten sind.

    Auch die .Exe die ich erstelle läuft problemlos auf demselben Rechner, nur nicht wenn ich sie woanders laufen lassen will. Das interessante dabei ist, dass ich wie schon erwähnt diverse andere ähnliche Programme erstellt habe bei denen das Problem nicht auftritt.

    Weiß jemand was es noch sein könnte? Hatte schon gedacht das irgendeine Ressource auf dem anderen Rechner fehlt, allerdings dürften ja dann die anderen Programme auch nicht laufen. Habe die .Exe schon mit verschiedenen Methoden erstellt, mit diesem Assistenten, oder einfach die aus dem debug-Ordner genommen oder aus dem Release-Ordner. Wenn ich das Programm auf dem anderen Rechner starte kommt das warten-Icon (der sich drehende Kreis) aber sonst passiert nichts. Da mein Programm auch nicht direkt nach Start sich irgendwo was aus dem Internet herunterlädt oä kann es auch nicht daran liegen das keine Verbindung besteht oder gesperrt wird von einer Firewall oä. NAch Starten sollte nur die fom mit der Oberfläche geladen werden.

    Hatte auch schon mal nach einer aktuelleren Version geschaut und auf dem anderen Rechner Visual Studio 2015 Express installiert aber hilft auch nichts. Auch auf meinem Laptop wo ich das Programm programmiere und wo es läuft wollte ich das mal updaten aber es kam die Meldung das mein Vb auf dem aktuellen Stand ist.

    harmenrabb schrieb:

    nur nicht wenn ich sie woanders laufen lassen will.
    • Für welchen Prozessor ist sie kompiliert (x86, x64, AnyCPU)?
    • Welches Framework verwendest Du?
    • Verwendest Du DLLs, die das Programm braucht (zum Projekt gehörig, Fremdinstallation)?
    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!
    VB 2010 Express (deine Aussage) und VB6 (als Tag zum Thema) passen nicht so recht zusammen.

    Wenn die Oberfläche nicht lädt, aber auch keine Fehlermeldung erscheint, deutet das auf ein Problem im Form.Load-Event hin.
    Dann könnte es helfen, zunächst den gesamten Funktionsrumpf deiner Form_Load-Funktion mit einem Try-Catch-Block zu umschließen und beim Abfangen einer Ausnahme die Exception.Message in einer MessageBox auszugeben. Wenn meine Glaskugel richtig liegt, solltest du auf diesem Wege auf dem anderen Rechner zumindest schonmal eine Fehlermeldung sehen und einen Hinweis darauf erhalten können, was tatsächlich deine Anwendung daran hindert, ordnungsgemäß zu starten.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Arby schrieb:

    mit einem Try-Catch-Block zu umschließen


    Wenn keine .Net/JIT Exception kommt, wird der Try/Catch wohl kaum etwas fangen können...

    Wie @EaranMaleasi schon schrieb. Das zeug aus dem Load ins Shown Event packen. Ohne try/catch.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ach so ja keine Ahnung. Die Syntax ist jedenfalls genau so wie früher in der Schule als ich VB6 gelernt habe



    RodFromGermany schrieb:

    harmenrabb schrieb:

    nur nicht wenn ich sie woanders laufen lassen will.


    Für welchen Prozessor ist sie kompiliert (x86, x64, AnyCPU)?
    Welches Framework verwendest Du?
    Verwendest Du DLLs, die das Programm braucht (zum Projekt gehörig, Fremdinstallation)?



    Wo kann ich das kontrollieren/einstellen? allerdings meine ich mit woanders erst mal einen anderen PC, und da laufen meine anderen erstellten Programme die ich mit derselben VB Version gemacht habe. Oder kann im Rahmen von Windows Udates da was geändert worden sein ohne dass ich es mitbekommen habe?
    Wenn dein Cide nicht all zu viel ist, poste ihn hier mal. Ansonsten lade das Projekt hier hoch. Dann kan man mal schauen ob da was drin ist, was nicht hin gehört.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Quellcode

    1. Private Sub FormMain_Load() Handles MyBase.Load
    2. cmdCoinsAuslesen.Enabled = False
    3. cmdAuswerten.Enabled = False
    4. cmdSpeichern.Enabled = False
    5. EinstellungenLaden()
    6. lblZeitStart.Text = ""
    7. lblZeitEnde.Text = ""
    8. anzahlCoins = ListeEinlesen()
    9. If anzahlCoins <> 0 Then
    10. lblAnzahlCoins.Text = anzahlCoins
    11. cmdCoinsAuslesen.Enabled = True
    12. End If
    13. End Sub


    Quellcode

    1. Public Sub EinstellungenLaden()
    2. If File.Exists(Path.GetDirectoryName(Application.ExecutablePath) & "\Settings.ini") Then
    3. Dim datei As New StreamReader(Path.GetDirectoryName(Application.ExecutablePath) & "\Settings.ini")
    4. FormMain.txtSeite.Text = datei.ReadLine()
    5. FormMain.txtCoinStart.Text = datei.ReadLine()
    6. FormMain.txtCoinEnd.Text = datei.ReadLine()
    7. FormMain.TextBezugswährung.Text = datei.ReadLine()
    8. FormMain.TextMinVolumen.Text = datei.ReadLine()
    9. FormMain.txtMinDifferenz.Text = datei.ReadLine()
    10. datei.Close()
    11. CoinsLaden()
    12. BörsenLaden()
    13. End If
    14. End Sub


    Quellcode

    1. Public Function ListeEinlesen() As Integer
    2. Dim anzahlcoins As Integer
    3. Dim i As Integer
    4. 'Liste der Coins einlesen
    5. If File.Exists(Path.GetDirectoryName(Application.ExecutablePath) & "\Liste.txt") Then
    6. Dim datei As New StreamReader(Path.GetDirectoryName(Application.ExecutablePath) & "\Liste.txt")
    7. anzahlcoins = datei.ReadLine()
    8. ReDim Coin(anzahlcoins)
    9. For i = 1 To anzahlcoins
    10. Coin(i).symbol = datei.ReadLine()
    11. Coin(i).URL = datei.ReadLine()
    12. Next i
    13. datei.Close()
    14. ListeEinlesen = anzahlcoins
    15. Else
    16. ListeEinlesen = 0
    17. End If
    18. End Function


    Das ist die FormLoad und die Funktionen/Subs die da aufgerufen werden. Die dort genannten anderen CoinsLaden() und BörsenLaden() machen dasselbe wie EinstellungenLaden, sind alles funktionen/subs wo ich mir nur Programmeinstallungen lade idie ich bei Programmende in Dateien Speichere. und ListeEinlesen vom Prinzip auch.

    Könnte natürlich sein das die Dateien fehlen, aber die waren immer vorhanden, ansonsten sollte er das ja überspringen wenn er sie nicht findet und die Default-Werte nehmen die in den Textboxen usw drinstehen

    Was mir auffällt ist, dass ListeEinlesen() keinen Rückgabewert hat.

    ListeEinlesen = anzahlcoins
    ListeEinlesen = 0

    Beides Quatsch. Mach da mal statt ListeEinlesen nen Return:

    Return anzahlcoins
    Return 0

    Keine Ahnung obs daran liegt, aber das ist definitiv falsch. Evtl. Haste da ne Endlosschleife programmiert, was das Problem sein kann. Zudem glaube ich. Du programmierst Option Strict off. Stell das mal auf ON.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo: Das ist die alte Herangehensweise bei ner Function. Da kann man den Function-Namen als Rückgabewert verwenden. Folgendes ginge also:

    VB.NET-Quellcode

    1. Public Sub Test()
    2. Dim Y = X
    3. 'Y = 3
    4. End Sub
    5. Public Function X() As Integer
    6. X = 3
    7. End Function

    Das ergibt also keine Endlosschleife.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Angefahren. Wieder ein Grund, warum ich lieber in C# programmiere...

    Wie auch immer. @harmenrabb Dann pack alles, was im Load Event steht, ins Shown Event. Gib uns dann Bescheid was das Ergebnis war.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @harmenrabb Wärst Du bitte mal so nett, diesen Deinen Thread in VB.NET umzubenennen?
    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!
    Wie gesagt bin halt von früher VB gewohnt, ja kann das umbenennen wenn ich rausfinde wie das geht



    mrMo schrieb:

    Was mir auffällt ist, dass ListeEinlesen() keinen Rückgabewert hat.

    ListeEinlesen = anzahlcoins
    ListeEinlesen = 0

    Beides Quatsch. Mach da mal statt ListeEinlesen nen Return:

    Return anzahlcoins
    Return 0

    Keine Ahnung obs daran liegt, aber das ist definitiv falsch. Evtl. Haste da ne Endlosschleife programmiert, was das Problem sein kann. Zudem glaube ich. Du programmierst Option Strict off. Stell das mal auf ON.


    Dürfte eigentlich nicht sein, da ja praktisch die ganze Funktion in einem if-Konstrukt steckt und im Else nur die 0 zurückgibt in einem Fehlerfall

    Du solltest schon auch lesen was hier so geschrieben wird...
    @VaporiZed hat meine Vermutung bereits wiederlegt, daher schrieb ich dann:
    Wie auch immer. @harmenrabb Dann pack alles, was im Load Event steht, ins Shown Event. Gib uns dann Bescheid was das Ergebnis war.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen