Я хочу проверить, существуют ли файлы .dll, .png и .exe перед запуском первого окна приложения, но проблема в том, что я не могу, как бы я ни пытался, просто выдает ошибку в окне просмотра событий, вместо моего сообщения.
Мой метод IsResourceExist:
private static bool IsResourceExist(string fileName)
{
var process = Process.GetCurrentProcess();
string path = process.MainModule.FileName.Replace("\\" + process.ProcessName + ".exe", "");
try
{
if (!File.Exists(Path.Combine(path, fileName)))
{
MessageBox.Show("Unable to load " + fileName + " library\nReinstall application and try again", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
return true;
}
catch
{
return false;
}
}
Простой метод, ничего необычного, в нормальной ситуации (когда файл действительно существует, работает нормально)
private static bool CheckLibrarys()
{
if (!IsResourceExist("MyLib.dll")) return false;
//Other resources checking same way
return true;
}
Этот метод проверяет все ресурсы, необходимые приложениям, также работаетв нормальной ситуации (когда все файлы существуют)
Я думаю, что самая первая строка кода, вызываемая приложением, работает, когда файлы существуют
public App()
{
if (!CheckLibrarys()) Environment.Exit(0);
}
Когда я удаляю файл MyLib.dll в программе просмотра событий, онthrows:
Описание: процесс был прерван из-за необработанного исключения.Информация об исключении: System.IO.FileNotFoundException в myapp.App.CheckLibrarys () в myapp.App..ctor () в myapp.App.Main ()
На самом деле это что-то вроде.Net Framework шутка?Чего мне здесь не хватает?
РЕДАКТИРОВАТЬ 1: Та же ситуация, даже с переопределением OnStartup
protected override void OnStartup(StartupEventArgs e)
{
if (!CheckLibrarys()) Environment.Exit(0);
base.OnStartup(e);
}
РЕДАКТИРОВАТЬ 2, расширяя @bic ответ, и все равно приложение не запускается и не выдает никакой ошибки, котораяmylib isssing
private static bool CheckLibrarys()
{
if (!IsResourceExist("MyLib.dll")) { return false; }
else
{
if (!MyLib.Init.ReturnOnlyTrue())
{
MessageBox.Show("Wrong loaded library, reinstall application and try again", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
}
//Other resources checking same way
return true;
}
В моем классе MyLib Init метод ReturnOnlyTrue () выглядит следующим образом:
public static bool ReturnOnlyTrue()
{
return true;
}