Laden...

Programm geht nicht mehr

Erstellt von Kuehter vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.519 Views
K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren
Programm geht nicht mehr

Habe folgendes Problem:
Sobald ich mein Programm in ein anderes Verzeichnis schiebe funktioniert es nicht mehr.
egal ob Desktop oder sonst etwas.
Das Notifiyicon wird nicht mehr angezeigt und die Position des Fensters wird nicht mehr geändert.
Die Hotkeys funktionieren auch nicht mehr.

J
251 Beiträge seit 2012
vor 8 Jahren

Was wird verschoben?

BTW: Ist "Geht Nicht" und ähnliches keine Fehlermeldung. Oder ist die Fehlerwirkung = Keine Wirkung, weil sie verschluckt wird, gewünscht?

K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren

Die .exe Datei
habe auch als admin ausgeführt im manifest, geht auch nicht

2.079 Beiträge seit 2012
vor 8 Jahren

Da kann dir niemand helfen, solange Du weder Fehlermeldung noch relevanten Code zeigst.

Am Ende wird es nämlich daran liegen, dass Du von irgendetwas abhängig bist, das an den ursprünglichen Ordner bindet.
Beispiele für sowas sind z.B. absolute Pfade, Dateien, die im selben Ordner gebraucht und nicht mit kopiert wurden, ein benötigter Unterordner, der zwar nur relativ angegeben wurde, aber nicht erstellt wurde/wird.
Denkbar sind aber auch Fehler, wie Schreib- / Leserechte im neuen Ordner

Ohne eine Fehlermeldung lässt sich nichts sagen.
Gibt es keine Fehlermeldung, dann hast Du vermutlich geschlampt und die entsprechende Exception gefangen und nicht behandelt.
Alternativ kannst DU auch im Zuverlässigkeitsverlauf nach schauen, ob Windows dort eine Fehlermeldung geloggt hat. Das tut es aber nur dann, wenn es auch eine Fehlermeldung gibt.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren

das wäre der Code der bei der Load gezogen wird wo es fest gelegt werden sollte.



        private void mainForm_Loaded(object sender, RoutedEventArgs e)
        {
            HotkeyManager.Current.AddOrReplace("OnInceremnt", Key.W, ModifierKeys.Windows, selectionchangeing, OnIncrement);
            HotkeyManager.Current.AddOrReplace("CloseProgramm", Key.N, ModifierKeys.Windows, CloseWindow);
            var desktopworkingArea = SystemParameters.WorkArea;
            this.Left = desktopworkingArea.Right - this.Width;
            this.Top = desktopworkingArea.Bottom - this.Height;
            ResizeMode = ResizeMode.CanMinimize;
            FocusManager.SetFocusedElement(grid, txt_WertName);
            icon.Icon = MitzaehlProgramm.Properties.Resources.Icon1;
            icon.BalloonTipIcon = ToolTipIcon.Info;
            icon.Text = "Stundenzähler";
            icon.Visible = true;
            contextmenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem1, menuItem2 });
            menuItem1.Index = 0;
            menuItem2.Index = 1;
            menuItem1.Checked = true;
            menuItem1.Text = "Im Vordergrund";
            menuItem2.Text = "Schließen";
            icon.MouseClick += new System.Windows.Forms.MouseEventHandler(icon_MouseClick);
            menuItem2.Click += new EventHandler(MyForm_Close);
        }


1.696 Beiträge seit 2006
vor 8 Jahren

besteht deine Anwendung aus einer einzigen exe-Datei oder gibt es noch andere? Und nochmals, ohne richtige Fehlermeldung kann man dir nicht viel helfen.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren

Es ist nur eine einzige Exe. Das Problem ist ja ich bekomme keine Fehlermeldung, sonst würde ich nicht hier fragen

K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren

habe den gesamten quellcode mit dran gehängt.

3.825 Beiträge seit 2006
vor 8 Jahren

Bitte überprüfe die Punkte die in der FAQ angegeben sind :

[FAQ] Programm läuft in anderer Umgebung nicht (richtig)

Wenn möglich per Debugger überprüfen oder durch Ausgaben (Logging) überprüfen ob Dein Programm ausgeführt wird. Fehlermöglichkeiten abfangen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

1.696 Beiträge seit 2006
vor 8 Jahren

habe den gesamten quellcode mit dran gehängt.

... und du erwartest ernsthaft, dass einer von uns das anschaut?

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

2.079 Beiträge seit 2012
vor 8 Jahren

Du kannst unter den Projekt-Eigenschaften den Pfad ändern, wo er hin kompilieren soll. Wenn der anders ist, läuft es dann?
Wenn nicht, dann kannst Du so zumindest vernünftig debuggen.

In dem geposteten Code kann ich nichts erkennen, was vom Programmordner abhängig ist.
Daher wird es wohl davor liegen.

Wenn es keinen Fehler gibt, wird der wohl irgendwo gefangen.
Ein try um irgendetwas und im catch ist nichts drin, was dir mitteilen kann, dass da etwas schief gelaufen ist. Gerne wird der catch-Block einfach leer gelassen, weil die Fehlermeldung dann nicht mehr auf tritt.
Such danach mal, wenn Du irgendwo ein catch hast, wo sich deine Anwendung nicht mit teilt, dann schreib da mal ein throw; rein.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

U
135 Beiträge seit 2009
vor 8 Jahren

Mal blöd gefragt: wohin verschiebst Du denn? Vielleicht auf ein Netzlaufwerk?

Und: schonmal im Windows Eventlog geguckt, ob unter System oder Application etwas protokolliert wird?

463 Beiträge seit 2009
vor 8 Jahren

Du wunderst dich, dass du keine Fehlermeldung bekommst?


catch (NullReferenceException)
{
}


catch (Exception)
{
}


catch (Exception)
{
     //throw;
}


catch (Exception) { }

und das sind noch lange nicht alle.... OHNE WORTE!

148 Beiträge seit 2013
vor 8 Jahren

Also das du keine Fehlermeldung bekommst wundert mich nicht (siehe Post vorher).

Aber ich wette dein Problem liegt damit zusammen, dass du nicht alle .dlls mit kopierst. Liege ich da richtig, dass du nur die .exe verschiebst? Dann wird er die NHotkey.Wpf, die du im MainWindow nutzt, nicht finden.

Grüße

T
2.224 Beiträge seit 2008
vor 8 Jahren

Ich habe mal die beiden .cs Dateien überflogen.
Mal davon abgesehen das dort überall leere catch Blöcke sind, was schon festgestellt wurde, gibt es noch andere sehr unschöne Lösungen.
In der SaveData generierst du den Dateinamen immer wieder über DateTime.Now und fragst dafür einzelne Teile wie Day, Month und Year ab.
Dann wandelst du diese einzeln zu um per Convert und dann wieder zu einem String.
Ist überflüssig, wenn du per DateTime.Now.ToString das entsprechende Format angibst.
Dafür kannst du dann Google nutzen.

Die ganzen try/catch Blöcke sind ein sehr mieser Stil.
Du solltest hier defensiver Programmierern.
Bau dafür if Prüfungen auf null ein und validiere die Eingabe sauberer.
Dies kannst du eben mit String.IsNullOrEmpty machen und auch mit den entsprechenden TryParse Methoden von int, double etc.

Exception sind sehr teuer für die Laufzeit bzw. auch sehr CPU Lastig.
Hier solltest du wenn möglich auf try/catch zum abfangen von fehlerhafter Programmierung vermeiden und deinen Code direkt an den richtigen Stellen angehen.

Wenn es aber doch Fehler gibt, die du abfangen willst, dann solltest du diese natürlich auch mit sauberen catch Anweisungen fangen und die Meldung ausgeben/loggen lassen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

2.079 Beiträge seit 2012
vor 8 Jahren

Ich denke, hier können wir nichts weiter machen.
Es wird vermutlich niemand konkret den kompletten Quellcode anschauen und die Fehler suchen, das ist auch nicht unsere Aufgabe.

Daher solltest Du am besten alles durch gehen und nach den Tipps von T-Virus überarbeiten.
Und bloß NIEMALS leere catch-Blöcke!!!
Einzige Ausnahme: Wenn dieses Verhalten explizit gewünscht ist. Ich habe das in den letzten Jahren nur ein einziges mal gesehen und da war es auch nur ein Umweg, der in dem Fall aber tatsächlich die beste Lösung war.

Zu dem, was Geaz schreibt:
Ich denke nicht, dass es an fehlenden DLLs liegt. Sind es als Referenz eingebundene DLLs, dann gibt es eine Exception, die man nicht abfangen kann - zumindest ist mir kein Trick bekannt.
Wenn es zur nachträglich gebundene DLLs sind, dann haben wir wieder das gleiche Problem: Die FileNotFoundException wird verschluckt.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

1.040 Beiträge seit 2007
vor 8 Jahren

Zu dem, was Geaz schreibt:
Ich denke nicht, dass es an fehlenden DLLs liegt. Sind es als Referenz eingebundene DLLs, dann gibt es eine Exception, die man nicht abfangen kann - zumindest ist mir kein Trick bekannt.
Wenn es zur nachträglich gebundene DLLs sind, dann haben wir wieder das gleiche Problem: Die FileNotFoundException wird verschluckt.

Deine Antwort passt nicht zu der Antwort von Geaz.
Geaz hat vollkommen Recht. Wenn er weitere DLLs eingebunden hat, muss er diese natürlich mit kopieren (er sagt nämlich weiter oben, dass er nur die EXE kopiert).

K
Kuehter Themenstarter:in
52 Beiträge seit 2015
vor 8 Jahren

ja es lag an den dlls

2.079 Beiträge seit 2012
vor 8 Jahren

Wirft nicht normalerweise Windows einen Fehler, wenn eine Anwendung gestartet werden soll, die nicht vorhandene DLLs eingebunden hat?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.