Ваш код, очевидно, не завершился с ошибкой внутри оператора try-catch внутри GetKeyValue (), потому что из журнала вы увидите, что ошибка возникла внутри самой функции.
Таким образом, ваш код должен либо давать сбой в «ложном» случае, либо формировать вызов StartLogFile () в блоке catch «истинного» случая.
Ложный случай
Обратите внимание, что у вас есть RegKey.Name
в вашем операторе журнала, и RegKey
очень очевидно null
, потому что вы никогда не устанавливаете его (оно устанавливается только в случае True). Я думаю, что здесь ваша ошибка.
Блок-загадка True Case
Блок catch в вашем "True" случае не имеет доступа ни к какому свойству любой переменной, которая может быть нулевой. Тем не менее, сам StartLogFile может не работать с таким исключением внутри .
Сменные операторы
У меня такое ощущение, что вы поменялись местами двумя вызовами StartLogFile () (ложный случай должен быть в блоке перехвата истинного случая, а тот, что в блоке перехвата истинного случая, должен быть в ложном случае ).
Избегайте регистрации ошибок, которая сама может завершиться сбоем
Кроме того, даже в блоке True case вы не можете предполагать, что RegKey
не является нулевым, потому что Registry.CurrentUser.OpenSubKey
может дать сбой, и вы не поймете, где находится ошибка, потому что ваш блок try-catch обнаруживает ошибку и ее вместо этого в вашем операторе регистрации ошибок! Этот тип ошибки может быть очень сложно найти, особенно в больших системах. Мораль: никогда не делайте ваш код регистрации ошибок слишком сложным - если они терпят неудачу, они затрудняют выяснить, что случилось.
Всегда включать трассировку стека в журнал ошибок
Кроме того, есть ли причина, по которой вы не включаете трассировку стека в журнал ошибок? Наличие трассировки стека немедленно укажет вас на строку кода проблемы.