Autor Beitrag
MMali
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 19.06.15 11:02 
Hallo Leute.
Ich hab mit meinem in "Microsoft Visual Studio Express 2013 für Windows Desktop" geschriebenen Programm (in C#) ein Problem.
Gleich im Vorhinein: Ich bin noch Anfänger im Programmieren, also nehmt Rücksicht falls ich nicht gleich alles verstehe.

Auf dem Rechner auf dem ich das Programm (Windows Application) geschrieben habe funktioniert alles einwandfrei.
Falls benötigt die PC-Daten:
Windows 7 Enterprise, Service Pack 1
Prozessor: Intel(R) Core(TM) i5-4310U CPU @ 2.00GHz 2.60GHz
Systemtyp: 64 Bit-Betriebssystem

Mein Problem liegt darin das ich das Programm auf anderen Industrie-PC benötige.
IPC-Daten:
Windows Embedded Standard Service Pack 1
Prozessor: Clereon(R) Dual-Core CPU T3100 @1.90GHz 1.90GHz
Systemtyp: 32 Bit-Betriebssystem

Beim start des Programms (.exe) auf dem Industrie-PC kommt diese Fehlermeldung:

Problem Event Name: CLR20r3
Problem Signature 01: createbackup.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 55793d3d
Problem Signature 04: mscorlib
Problem Signature 05: 4.0.30319.17929
Problem Signature 06: 4ffa561c
Problem Signature 07: 43c4
Problem Signature 08: 105
Problem Signature 09: System.IO.DirectoryNotFound
OS Version: 6.1.7601.2.1.0.320.65
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Read our privacy statement online:
go.microsoft.com/fwl...288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt


Das Programm hat das Zielframework: .NET Framework 4
Am IPC ist Standardmäßig .NET Framework 3 und 3.5 jedoch hab ich natürlich die 4er Version und auch schon mal höher (Verschiedene PCs) schon vorher installiert.
Ich hab auch schon zum Testen alle Pfade im Programm Kommentiert (dachte wegen System.IO.DirectoryNotFound) hat aber nichts geholfen.
Hab auch schon alles mögliche Gegoogelt, half alles nichts.
Ich kann mir selber komm nicht mehr weiter, hoffe ihr könnt mir dabei helfen.


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Fr 19.06.2015 um 11:45
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 19.06.15 11:51 
Hallo und :welcome:

sind die beiden Rechner miteinander verbunden? Dann könntest du per Remote-Debugging mal den externen Prozeß starten und überwachen (evtl. benötigst du dann aber die MS VS Community Edition, da die Express das nicht unterstützt).

Ansonsten benutze einen Logger (z.B. NLog) und protokolliere alle Pfade und -zugriffe.

Ich denke, daß es wegen der unterschiedlichen Windows-Versionen zu der DirectoryNotFoundException kommt, d.h. evtl. bestimmte Systempfade anders heißen (falls dein Programm oder eine verwendete Lib auf diese zugreift).

Für diesen Beitrag haben gedankt: MMali
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 22.06.15 08:03 
Hallo und danke für die Antwort.
Habe übers Wochenende keine Zeit gehabt mir das Problem weiter anzuschauen.

Nein die Rechner sind nicht miteinander verbunden, kann aber beide ins selbe Netzwerk hängen.

Ich Probier NLog mal aus und schau was er mir da ausgibt.

Also mein Programm greift schon auf Pfade zu, diese hab ich aber auf die des IPC abgestimmt.
Kann es sein das bei nur einem falsch geschriebenen Pfad die DirectoryNotFoundException kommt?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 22.06.15 09:41 
Hallo,

was mir noch einfällt: pack doch einfach mal in der Main-Methode ein try...catch rein und lass dir die Exception (in einer MessageBox o.ä.) ausgeben (evtl. noch zusätzlich die InnerException).
Und falls du eigene Threads verwendet, dann noch zusätzlich in der AppDomain.UnhandledException (s. dortiges Beispiel).
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 22.06.15 13:03 
Also ich bin schon mal weiter, das Programm lässt sich starten.
Der Fehler bisher war in der Lib (using System. ...) wo ich nach ein wenig Probieren wohl Vergessen habe einen nicht mehr verwendeten "Namespace"? zu entfernen.
Das hat dem IPC wohl nicht gefallen.
Also danke schon mal dafür.

Hast du vielleicht auch für diesen Fehler einen Ansatz an was es liegen könnte:

Cannot start process because a file name has not been provided.

Danke schon mal im Voraus.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 22.06.15 13:15 
Hast du evtl. ein bißchen mehr Info dazu?
Du startest wahrscheinlich einen Process mittels Start? Hast du dabei auch den vollen Pfadnamen angegeben? Oder paßt das WorkingDirectory nicht?
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 23.06.15 09:11 
Das Problem hat sich erledigt war nur eine Falsche Pfadangabe(Verschrieben).
Trotzdem Danke.

Ich würde sagen meine Frage wurde hiermit beantwortet.
Bin von der schnellen Hilfe Begeistert und werd bestimmt noch öfters in den Foren stöbern.

lg MMali
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 23.06.15 10:24 
Ich hoffe mal, daß du keine (System-)Pfade als feste String-Literale in deinem Programm hast, sondern dafür Application.StartupPath oder Environment.GetFolderPath(...) benutzt.
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 23.06.15 11:58 
Ahm, doch ich denke schon. Hier ein BSP für einen Prozess-start in meinem Programm:
ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
try
{
    Process p1 = new Process
    {
        StartInfo = new ProcessStartInfo { FileName = @"C:\createBackup\acronistools\startbackup.bat" }
    };
    p1.Start();
    AutoClosingMessageBox.Show("         The Backup-Process is started!" + Environment.NewLine + "            This may take some time!""© ... GmbH"5000);
    p1.WaitForExit();

    while (File.Exists(labelWhere.Text + @"\Backup\backuperfolgreich.txt") == (false))
    {
        System.Threading.Thread.Sleep(100);
    }
    loadingWindow.Close();
                        
    File.Delete(labelWhere.Text + @"\Backup\backuperfolgreich.txt");
                        
    using (StreamWriter sw = File.AppendText(@"C:\createBackup\acronistools\EventLog.txt"))
    {
        sw.WriteLine("The Backup-Process is finished! " + DateTime.Now.ToShortTimeString());
    }
    using (StreamReader sr = File.OpenText(@"C:\createBackup\acronistools\EventLog.txt"))
    {
        string EventLog = "";
        EventLog = sr.ReadToEnd();
        labelLog.Text = EventLog;
    }
                        
    AutoClosingMessageBox.Show("         The Backup-Process is finished!" + Environment.NewLine + "            The file is located at " + labelWhere.Text + "!""© ... GmbH"5000);
}
catch (Exception ex)
{
    MessageBox.Show("Attention: " + ex.Message, "© ... GmbH");
    Close();
}

Manche System Pfade werden erst durch ein Label.Text vervollständigt da sie Variabel sind je nach Eingabe des Users.
Was würdest du sonst empfehlen?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 23.06.15 12:44 
Anstatt der festen Pfad-Literale (evtl. gibt es z.B. gar kein "C:"-Laufwerk - auf meinem Dual-Boot-Rechner ist bei einem Windows "D:" mein Systemlaufwerk und "C:" gibt es dort gar nicht ;- ) solltest du z.B. eine Konfigurationsdatei o.ä benutzen, damit der Anwender die Pfade anpassen kann.
Und zum Zusammensetzen von Pfaden solltest du Path.Combine() benutzen:
ausblenden C#-Quelltext
1:
2:
3:
string path = Settings.BackupPath; // o.ä.

string fullFilename = Path.Comine(path, "startbackup.bat");

Für die Konfigurationsdatei (config.xml) lies dir mal [Tutorial] Konfigurationsmodell im .NET Framework durch.

PS: Und auch die anderen Texte (wie den Namen deiner Firma) solltest du über einen Eintrag auslesen, der nur an einer Stelle steht (und dann auch nur dort geändert werden braucht), z.B. mittels AssemblyCompany (in Properties/AssemblyInfo.cs).
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 23.06.15 15:31 
Das sollte für mich eigentlich kein Problem sein da alle IPCs auf die das Programm kommt gleich sind/das selbe Image draufgespielt wird.
Und falls ich mal andere bekommen sollte kann ich die Pfade an meinem PC ändern, das Projekt wird ja abgespeichert.
Oder denkst du das das in dem Fall Notwendig ist?


Der Path.Combine() Befehl hat mir weitergeholfen, danke.


Ist bei .xml Dateien ein XML writer zwingend notwendig? Umschreiben lässt sichs ja auch mit File.WriteAllLines bzw. mit dem StreamWriter.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 23.06.15 15:56 
Die Frage nach der XML-Datei schweift jetzt ein bißchen ab - mach dafür bitte dann ein eigenes Thema auf.
Aber eigentlich benötigst du, wenn du meinen Link zum Konfigurationsmodell gelesen hast, keinen eigenen XmlWriter oder XmlReader...

Für diesen Beitrag haben gedankt: MMali
MMali Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 23.06.15 16:38 
Okay, danke nochmal.