Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отслеживание отсутствия dll 
:(
    Опции темы
TechnoMag
Дата 25.7.2012, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



C#. Winforms.
В проекте в качестве зависимостей добавлены сторонние Dll. Проблема в том, что если в директории в которой находится исполняемый файл нет этих dll, то программа падает.
Как в коде программы предотвратить падение в случае отсутствия библиотек и выдать сообщение, что эти библиотеки отсутствуют?
PM MAIL ICQ   Вверх
erm0l0v
Дата 25.7.2012, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



PM MAIL   Вверх
TechnoMag
Дата 28.7.2012, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Как это использовать?
Если я пишу:

Код

public class MyType
    {
        public MyType()
        {
            MessageBox.Show( "MyType instantiated!" );
        }
    }

    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            AppDomain currentDomain = AppDomain.CurrentDomain;
            InstantiateMyTypeFail( currentDomain );
            currentDomain.AssemblyResolve += new ResolveEventHandler( MyResolveEventHandler );
            InstantiateMyTypeFail( currentDomain );
            InstantiateMyTypeSucceed( currentDomain );

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }

        private static void InstantiateMyTypeFail( AppDomain domain )
        {
            // Calling InstantiateMyType will always fail since the assembly info
            // given to CreateInstance is invalid.
            try
            {
                // You must supply a valid fully qualified assembly name here.
                domain.CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" );
            }
            catch (Exception e)
            {
                MessageBox.Show( e.Message );
            }
        }

        private static void InstantiateMyTypeSucceed( AppDomain domain )
        {
            try
            {
                string asmname = Assembly.GetCallingAssembly().FullName;
                domain.CreateInstance( asmname, "MyType" );
            }
            catch (Exception e)
            {
                MessageBox.Show( e.Message );
            }
        }

        private static Assembly MyResolveEventHandler( object sender, ResolveEventArgs args )
        {
            MessageBox.Show( "Resolving..." );
            return typeof( MyType ).Assembly;
        }
    }


то все сообщения описанные тут в статических методах выводятся в любом случае, даже если dll находятся в папке с программой. Приложение все-равно падает в случае отсутствия dll.

Это сообщение отредактировал(а) TechnoMag - 28.7.2012, 02:52
PM MAIL ICQ   Вверх
mrbrooks
Дата 2.8.2012, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



используй ленивую загрузку библиотек, а не через ссылки в студии. 
PM MAIL   Вверх
Figoro
Дата 5.10.2012, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 27.3.2005
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Как вариант использовать при запуске приложение которое проверяет все зависимости а затем запускает основное приложение (Process.Start).
Так же можно сделать модульное приложение, или использовать Prism.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1000 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.