#4 p3can
"coz podle me neni ten pripad ze se ani nespusti"
V tom ti musím oponovat, ono není nad telefonát typu "mě to nefunguje", "a co to dělá?", "nic, nevím... cosi nesrozumitelnýho anglicky a čísílka, je tam toho hodně",.... Místo "píše mě to chybnou instalaci"
Jinak eventy jsem zkusil, ale chová se to úplně stejně. - resp. stejně jako normálního odchytávání výjimek. Tuším, že tady to funguje nějak jinak.
Konzolová aplikace:
static void Main(string[] args)
{
try
{
CallDLL(args);
}
catch (Exception ex)
{
// výpis neošetřené chyby na konzolu a do textového souboru
String error = String.Format("Chyba: {0}\n{1}\n", ex.GetType().ToString(), ex.Message);
String erlog = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\error.log";
Console.WriteLine(error);
try
{
using (StreamWriter objSw = new StreamWriter(erlog, true, Encoding.UTF8))
{
objSw.WriteLine(String.Format("{0}\n{1}", DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss K"), error));
objSw.Flush();
objSw.Close();
Console.WriteLine("Text chyby byl uložen do souboru: {0}", erlog);
}
}
catch
{
Console.WriteLine("Selhal pokus o uložení do LOGu {0}", erlog);
}
}
}
GUI aplikace (to stejné)
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
CallDLL();
}
catch (Exception ex)
{
#warning pro nedostupnou sharelib funguje, ale při smazání sql dll
// výpis neošetřené chyby do dialogu a do textového souboru
String error = String.Format("Chyba: {0}\n{1}\n", ex.GetType().ToString(), ex.Message);
String erlog = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\error.log";
try
{
using (StreamWriter objSw = new StreamWriter(erlog, true, Encoding.UTF8))
{
objSw.WriteLine(String.Format("{0}\n{1}", DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss K"), error));
objSw.Flush();
objSw.Close();
MessageBox.Show(error + String.Format("\nChyba uložena do logu: {0}", erlog), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch
{
//Console.WriteLine("Selhal pokus o uložení do LOGu {0}", erlog);
MessageBox.Show(error + String.Format("\nSelhal pokus o vytvoření logu: {0}", erlog), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
A vstupní metoda sdílení DLL
public void Run()
{
try
{
// ... společný kód
}
catch (MyException ex)
{
msg.Error(ex.Get_Error_Msg());
Environment.Exit(ex.Err_code);
}
catch (MyDebugException ex)
{
msg.Error(ex.Get_Error_Msg());
ExitException(GlobalSet.EXITCODE_DEBUG_EXCEPTION);
Environment.Exit(GlobalSet.EXITCODE_DEBUG_EXCEPTION);
}
Pointa je v tom, že když do DLL knihovny doplním ještě "catch (Exception ex)", tak to odchytne i chybu v SQL, ale v tomto tvaru výjimka prostě "neprobublá" až nahoru ke spouštěcí aplikaci.
Jinak řečeno řešení už mám, ale nevím proč se to takto chová..