Autor Beitrag
Troubadix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: So 04.12.11 21:05 
Hallo,

ich bin gerade schier am Verzweifeln.

Ich habe auf meinem Windows 7 x64 Rechner eine .Net Anwendung in C# entwickelt. Auf dem Rechner läuft sie auch einwandfrei. Zum testen habe ich die Anwendung auf eine Windows XP SP3 VM kopiert und dort gestartet. .Net 4.0 Client Profile ist natürlich installiert. Eine andere Anwendung die ich auf dem selben Rechner programmiert habe läuft auch einwandfrei.

Die Anwendung startet auch erst (zeigt einen SplashScreen) wird dann aber von Windows beendet (Anwendung hat ein Problem festgestellt und muss beendet werden.)

Durch Debug-Einträge in eine Datei habe ich herausgefunden, dass der Ausstieg im InitializeComponents() der mainForm statt findet. Und zwar mit der letzten Anweisung darin (this.PerformLayout();). Bis genau vor diese Anweisung klappt alles.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
            // 
            // frmMain
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(369530);
            this.Controls.Add(this.pnlBottom);
            this.Controls.Add(this.pnlParameter);
            this.Controls.Add(this.pnlTop);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.KeyPreview = true;
            this.MinimumSize = new System.Drawing.Size(38538);
            this.Name = "frmMain";
            this.Text = "Firedolphin Test Tool";
            this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmMain_FormClosed);
            this.Shown += new System.EventHandler(this.frmMain_Shown);
            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.frmMain_KeyPress);
            this.pnlTop.ResumeLayout(false);
            this.pnlTop.PerformLayout();
            this.toolStrip1.ResumeLayout(false);
            this.toolStrip1.PerformLayout();
            this.pnlBottom.ResumeLayout(false);
            this.pnlBottom.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

Ich habe jetzt schon ein paar Stunden rumgegoogelt aber keinen Hinweis darauf gefunden warum meine Anwendung unter Windows 7 läuft und unter XP nicht. Hat vielleicht jemand einen Tipp??

Zur Info: Ich verwende Visual Studio 10 Express. In der Form sind nur Standard Steuerelemente (lieferumfang von VS) und ein UserControl dass sich aber auch nur aus zwei Standard Controls zusammen setzt und erst später zur Laufzeit platziert wird. Das einzige was ich als außergewöhnlich bezeichnen würde: Beim Start befindet sich auf der Form ein FlowPanelControl ohne eigene Controls. Dieses ist auf AutoSize eingestellt und hat beim Start damit die Höhe 0px.

Für Tipps wäre ich sehr Dankbar.

Wenn noch Codeausschnitte nötig sind, dann sagt bescheid. Ich wollte hier jetzt nicht die ganze mainForm posten.

Gruß
Troubadix
ujr
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: Mo 05.12.11 13:32 
Hallo,

user profile iconTroubadix hat folgendes geschrieben Zum zitierten Posting springen:
Und zwar mit der letzten Anweisung darin (this.PerformLayout();). Bis genau vor diese Anweisung klappt alles.


=> try/catch drum und Exception lesen

Und/oder AppDomain.UnhandledException benutzen.

Für diesen Beitrag haben gedankt: Troubadix
Troubadix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: Mo 05.12.11 17:47 
Hallo ujr,

vielen Dank für den Tipp. Das hat mich auf die richtige Spur gebracht.

Durch den Aufruf this.PerformLayout() wurde bereits ein OnResize() Event für eines der Panel aufgerufen. Der Fehler war in dem EventHandler des OnResize Events zu finden und wurde auch in der Exception genau beschrieben.

Ich hatte an try/catch nicht gedacht, weil mir ja keine unbehandelte Ausnahme berichtet wurde (jedenfalls nicht wörtlich).

Problem ist gelöst.

Danke
Troubadix
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.12.11 20:43 
user profile iconTroubadix hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte an try/catch nicht gedacht, weil mir ja keine unbehandelte Ausnahme berichtet wurde (jedenfalls nicht wörtlich).
Wenn Windows einen Fehler in einer Anwendung feststellt, bedeutet das (wie du nun ja mitbekommen hast) in aller Regel tatsächlich "nur", dass eine Zugriffsverletzung nirgends in der Anwendung behandelt wurde und daher bei Windows / in der .NET Runtime gelandet ist. ;-)