C# WinForms - nieznany błąd "program przestał działać"

0

Hej,

od jakiegoś czasu rozwijam aplikację, z której korzysta drobna liczba użytkowników. Po udostępnieniu nowej wersji otrzymałem właśnie informację, że aplikacja się wysypuje przy uruchomieniu, jednak u mnie działa bez zarzutu.

Screeny od użytkownika:
user image
user image

Użytkownik korzysta z Win7, ja z Win10.
Sprawdziłem również na innym komputerze w domu (Win7). Błąd również występuje, .Net framework aktualny. Skopiowałem z niego pliki, o których mowa na screenie nr. 2.

Link do plików ze screenu: http://sendfile.es/pokaz/637567---9bvh.html
Link do programu: http://sendfile.es/pokaz/637529---kxqo.html

Bardzo bym prosił o pomoc i z góry dziękuję,
pozdrawiam

3

Na przyszłość: dawaj normalne paczki ZIP ze swoim programem, a nie wersje instalacyjne, będzie o wiele łatwiej przetestować. Tak samo do celów debugowania dostarczaj pliki PDB.

W minidumpie jest wyjątek:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module.
Additional information: Nie odnaleziono pliku.

Otwórz plik minidump w Visual Studio i zrób "Debug with Managed Only", jeżeli nie przenosiłeś swoich programów poza oryginalną lokalizację to może ci się uda załadować źródła od razu i pokaże gdzie następuje wyjątek. Ja jak próbowałem wygenerować PDB przez JustDecompile to niestety nie zadziałało, więc więcej nie jestem w stanie powiedzieć.

[update]
Zadziałało, ale teraz wywraca mi VS za każdą próbą debugowania. Ale zrobiłem przynajmniej Call Stack:

 	[Frames below may be incorrect and/or missing, no binaries loaded for System.Drawing.dll]	
 	[Managed to Native Transition]	
>	CZS Generator.exe!czs_generator.Form1.Form1() Line 152	C#
 	CZS Generator.exe!czs_generator.Program.Main() Line 13	C#
 	[Native to Managed Transition]	

Czyli wyjątek wyskakuje gdzieś w okolicach Form1.Form1() w okolicach linii 152. Jeżeli masz jakieś komentarze (bo ja nie, reverse-engineerowałem źródła) to chodzi o wywołanie if (Form1.myRegular == null) - ono się już nie wywołuje, gdzieś przed nim następuje wyjątek.

[update 2]
Dokładniejsze info - wyjątek FileNotFoundException zgłaszany jest w System.Drawing:

>	KERNELBASE.dll!_RaiseException@16()	Unknown
 	[Managed to Native Transition]	
 	System.Drawing.dll!System.Drawing.Text.PrivateFontCollection.AddMemoryFont(System.IntPtr memory, int length)	Unknown
 	CZS Generator.exe!czs_generator.Form1.Form1() Line 152	C#
 	CZS Generator.exe!czs_generator.Program.Main() Line 13	C#
 	[Native to Managed Transition]	
 	mscoreei.dll!7380ffcc()	Unknown
 	[Frames below may be incorrect and/or missing, no symbols loaded for mscoreei.dll]	
 	mscoree.dll!_ShellShim__CorExeMain@0()	Unknown
 	mscoree.dll!__CorExeMain_Exported@0()	Unknown
 	ntdll.dll!___RtlUserThreadStart@8()	Unknown
 	ntdll.dll!__RtlUserThreadStart@8()	Unknown

[update 3]
Wyszukiwanie PrivateFontCollection i FileNotFoundException daje jako rezultat sytuację "The specified font is not supported or the font file cannot be found."

0

Dzięki, już mam. Program w Form_Load sprawdzał argumenty przy odpalaniu aplikacji, aby wiedzieć czy została uruchomiona poprzez podwójny klik na plik projektu czy standardowo.

string[] args = Environment.GetCommandLineArgs(); 

Tutaj odnosiłem się na sztywno do args[1] jeśli ilość elementów była większa od 1. W Win10 wystarczyło, w 7mce już nie (dziwne...). Tym razem zastąpiłem to czymś bardziej uniwersalnym:

                foreach (string arg in args)
                {
                    if (arg.Contains(".czs"))
                        LoadData(arg);
                }

Pozdrawiam

edit: aha, no i przepraszam.. rzeczywiście rozsądniej było wrzucić po prostu cały projekt :)

2

Sprawdź, czy aby na pewno to było to - bo po tych moich kombinacjach wychodzi na to, że wyjątek został zgłoszony jednak przy ładowaniu fontu, nie przy ładowaniu pliku.

I lepiej chyba EndsWith(".czs") niż Contains(), tak nawiasem ;-)

0

@Ktos, tak, sprawdziłem to i rzeczywiście. Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1