gabrixl
Goto Top

Windows Form Application kompilieren für alle Windows Versionen? (VB.net)

Hallo liebe Community

Mir ist aufgefallen das meine Windows Form Applications nur auf dem System richtig funktionieren, auf welchem ich es programmiert und kompiliert habe. Leider sind so alle möglichen Programme nutzlos.. Arbeite mit Visual Studio Professional 2015 und frage mich ob es einen Weg gibt das die .exe schlussendlich auf jedem Windows problemlos läuft.

Hat jemand Tipps wie ich das hin bekomme? Würde gerne mit VB.net weiter programmieren..

Danke im Voraus für die Hilfe!

Freundliche Grüsse

gabrixl

Content-ID: 381378

Url: https://administrator.de/contentid/381378

Ausgedruckt am: 23.11.2024 um 18:11 Uhr

Kraemer
Kraemer 26.07.2018 um 08:15:22 Uhr
Goto Top
Moin,

du musst schon selbst dafür sorgen, dass die Abhängigkeiten aufgelöst werden.

Gruß
emeriks
emeriks 26.07.2018 aktualisiert um 08:45:09 Uhr
Goto Top
Hi,
nur auf dem System richtig funktionieren,
Was heißt denn "richtig"? Starten Sie, aber die Funktinion ist nicht gegeben oder starten sie gar nicht erst?
Und dort wo es nicht läuft: Wie unterscheiden sich diese Computer von jenem, auf welchem das VS2015 läuft? Windows Version, .Net Version?
Hast Du und wenn ja welche Verweise hast Du dem Projekt hinzugefügt? Gibt es diese DLL's ggf. auf den anderen Computern überhaupt?
Was macht das Programm überhaupt? Irgendwas, wofür man bestimmte Rechte benötigt?
Wie kompiliert: x86, x64, AnyCPU?

Ich programmiere sehr viel in VB.Net und ich kenne solche Probleme auch. Diese sind aber immer hausgemacht, also von mir selbst verschuldet.

E.
SachsenHessi
SachsenHessi 26.07.2018 aktualisiert um 08:53:15 Uhr
Goto Top
Hallo,

denke auch daran, das ggf. bestimmte Funktionalitäten in den neuern FrameWorks/Assemblys/Bibliotheken nicht mit allen Windows-Versionen funktionieren.
Auch testen, ob die Frameworks/Assemblys/Bibliotheken, die Du nutzt, auch intalliert sind.
Gleiches gilt für Assemblys/Bibliotheken von Drittanbietern.
Zu finden unter: Verweise

LG
Frank
eisbein
eisbein 26.07.2018 um 08:55:09 Uhr
Goto Top
Guten Morgen!

Ich stimme da @SachsenHessi und @emeriks voll zu,

Welche Fehlermeldung wird denn ausgegeben. Windows ist da zwar oft sehr kryptisch aber ohne Kommentar einfach nichts zu tun, kommt da wohl selten vor.

Gruß
eisbein
gabrixl
gabrixl 26.07.2018 um 09:30:49 Uhr
Goto Top
Hallo und danke für die Antwort

Es ist ein Reminder / ToDo Programm. Kompiliere es auf einem Win7 x64, an AnyCPU hab ich nichts geändert (also das was Standard ist ^^'). Hatte bis jetzt nur Probleme wenn ich es auf Win10 laufen gelassen hab. Es gibt keine zusätzlichen DLL's und ich hab bis .Net v4.0 (client).

Das Programm startet normal, ein Label wird nicht dargestellt, die meisten Funktionen sind da, aber z.B. der Backgroundworker tut sein Job nicht. Die ToDo's werden mit Textdateien abgespeichert, das Programm legt bei Bedarf ein neues Verzeichnis an, aber hauptsächlich werden Textdateien erstellt und gelesen.

Das Programm buggt auch wenn ich es als Administrator ausführe, von dem her denke ich nicht das es besondere Rechte benötigt..

Lg
eisbein
eisbein 26.07.2018 aktualisiert um 09:57:32 Uhr
Goto Top
Hatte bis jetzt nur Probleme wenn ich es auf Win10 laufen gelassen hab.

Dann vergleiche mal die Framework-Version die du installiert hat.
Es kann evtl. sein, dass du für Win10 ein paar "ältere" Frameworks installieren musst.

Gruß
eisbein
emeriks
emeriks 26.07.2018 um 09:48:48 Uhr
Goto Top
Ansatz:
Baue in Dein Programm Statusmeldungen ein, z.B. in Form von Messageboxen oder Logfileeinträgen.
Wenn Du das Programm mit einem bestimmten Kommendozeilenparameter startest dann soll es fleißig melden.
"Bin jetzt hier"
"tue gerade das"
"dieser Wert ist so"
usw.

So bekommst Du heraus, wo es hängt.

E.
gabrixl
gabrixl 26.07.2018 um 10:03:39 Uhr
Goto Top
Hab das Programm auf einem Win10 Gerät mit VS Community 2017 Schritt für Schritt debuggt, es tut auch was es soll (oder gibt es zumindest) vor. Der BackgroundWorker geht z.B. ins richtige "IF" führt den Befehl aus aber nichts passiert. Es sollte eine Nachricht erscheinen es führt den "Nachricht Befehl" aus und fährt im Code weiter als wär nichts gewesen, von der Nachricht aber keine Spur. Auf dem Win7 geht es Problemlos, werde sobald ich die Möglichkeit habe die Framework-Versionen abgleichen.

Kann es an den Imports liegen? Habe die user32.dll importiert:

 
<DllImportAttribute("user32.dll")>  
    Public Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Integer
    End Function
Kraemer
Kraemer 26.07.2018 um 10:33:47 Uhr
Goto Top
Jupp
gabrixl
gabrixl 26.07.2018 um 10:35:11 Uhr
Goto Top
Okay, was muss ich in meinem Fall tun? Eine Datei im Verzeichnis mitliefern? Davon versteh ich leider gar nichts :/
emeriks
emeriks 26.07.2018 um 10:36:13 Uhr
Goto Top
Es wäre doch sinnvoll, auf einem Computer zu debuggen, wo es nicht läuft. Und wenn Du dort kein VS installiert hast dann eben mit solchen eingebauten Statusmeldungen.
gabrixl
gabrixl 26.07.2018 um 10:47:46 Uhr
Goto Top
Hab oben geschrieben: "Hab das Programm auf einem Win10 Gerät mit VS Community 2017 Schritt für Schritt debuggt" Auf dem Gerät funktioniert es nicht richtig.
emeriks
emeriks 26.07.2018 aktualisiert um 10:50:47 Uhr
Goto Top
Auf dem Gerät funktioniert es nicht richtig.
Das hast Du aber jetzt erst geschrieben.

Nicht übel nehmen:
den Befehl
Der Befehl? Dieser?
SachsenHessi
SachsenHessi 26.07.2018 aktualisiert um 11:06:49 Uhr
Goto Top
Ich noch mal ;)

<DllImportAttribute("user32.dll")>   
    Public Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As Integer, lParam As Integer) As Integer 
    End Function
Vorsicht bei der User32.dll !
Die gibt es je nach Betriebsystem in unterschiedlichen Varianten (incl. der darin enthaltenen Funktionalitäten und deren Ansprache).
Versuche lieber mit "Standard-Framwork-Methoden/Objekten" auszukommen.
Es gibt ja im VS die Möglichkeit einen "Service" zu erstellen (das sollte eigentlich passen).
Bei dem Backgroundworker mussst Du dich mal mit dem Thema Threads und Thredsicherheit beschäftigen.

LG
SH
gabrixl
gabrixl 26.07.2018 um 11:04:13 Uhr
Goto Top
Update: Hab dem Mitarbeiter (Win10) jetzt noch das user32.dll in den selber Ordner wie die .exe gepackt, leider ohne Erfolg

Der Befehl? Dieser?

bgw_stop("Reminder", msg, 0, (back_files(back_dates.IndexOf(f_date))))  

    Sub bgw_stop(title As String, msg As String, time As Integer, path As String)
        Me.Invoke(Sub() message.show_reminder(title, msg, time, path))
    End Sub

Ist nur ein Sub der aufgerufen wird, der Sub (welcher eine andere UserForm einblendet) wird durchgeführt, die Nachricht wird nicht eingeblendet, kein Error oder Meldung in irgend einer Form.

Sorry wenn ich zu wenig Details liefere ^^'

Danke für deine Mühe!
emeriks
emeriks 26.07.2018 um 11:12:04 Uhr
Goto Top
Hast Du schon mal im Eventlog "Anwendung" nachgeschaut, ob da .Net-Fehler gemeldet werden?
gabrixl
gabrixl 26.07.2018 um 11:13:28 Uhr
Goto Top
Habe die Dll Imports jetzt entfern, vill. bringt es ja was face-smile Danke für die Info!
gabrixl
gabrixl 26.07.2018 um 11:16:23 Uhr
Goto Top
Nein hab ich noch nicht, werde ich machen sobald die Möglichkeit besteht!
Kraemer
Kraemer 26.07.2018 um 11:18:03 Uhr
Goto Top
Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr