Получить имя папки, где находится запущенный dll-файл

Автор Тема: Получить имя папки, где находится запущенный dll-файл  (Прочитано 25657 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Кроме шуток, не могу получить имя папки, где лежит запущенный dll-файл!

Код - vb.net [Выбрать]
  1.         MsgBox(Application.StartupPath) ' C:\Program Files\Autodesk\AutoCAD 2014
  2.  
  3.         MsgBox(Application.ExecutablePath) ' C:\Program Files\Autodesk\AutoCAD 2014\acad.exe
  4.  
  5.         MsgBox(Application.CommonAppDataPath) 'C:\ProgramData\Autodesk, Inc.\AutoCAD\R19.1.108.0.0
  6.  

Совсем не то показывает )))

Подскажите как получить место, где dll-лежит ))) Карму подниму )))

Отмечено как Решение Пашин Евгений 30-09-2015, 09:39:44

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Попробуй Assembly.GetExecutingAssembly( ).Location
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Алексей Кулик, спасибо )))

Код - vb.net [Выбрать]
  1.         Dim myPath As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
  2.  
  3.         MsgBox(myPath.Location)

Я бы точно сам не догадался! Или поиск решения занял бы большое количество времени!

_______________________________________________________________
Это я не понял )))) А почему Вашу карму можно мгновенно плюсовать? ))))

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Вот уж чего не знаю, того не знаю. Я за этими вещами не гонюсь :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Для VB.NET можно еще использовать специфическую обертку
Код - vb.net [Выбрать]
  1. Dim path As String = My.Application.Info.DirectoryPath
Вернет папку, где лежит библиотека.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Да, тоже работает!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Да, тоже работает!

Мало того, это действительный путь к dll-файлу! А не к сборке )))

________________________________________________________________________________
Не понял как получилось двойное сообщение, я же просто подредактировать сообщение хотел...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Мало того, это действительный путь к dll-файлу! А не к сборке )))
Не понял. О чем это ты?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Off-Topic: показать
Что так скромно-то, всего +40? Не надо жадничать, накрути уж от души :)

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Не понял. О чем это ты?

Ну вообще-то я получил не полный путь к папке dll-файла, а лишь все папки, которые находятся до папки BIN\RELEASE...

Код - vb.net [Выбрать]
  1.         Dim myPath As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
  2.  
  3.         MsgBox(myPath.Location) ' Возвращает «D:\Пашин\Visual Studio 2013\Projects\AutoCAD_First_Button_After_Error\AutoCAD_First_Button_After_Error»

 В принципе мне и этого хватает... но вот код

Код - vb.net [Выбрать]
  1. Dim path As String = My.Application.Info.DirectoryPath ' Возвращает «D:\Пашин\Visual Studio 2013\Projects\AutoCAD_First_Button_After_Error\AutoCAD_First_Button_After_Error\bin\Release»

дает весь путь. Жаль, что нельзя отмечать несколько решений, как верные решения )))

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Что так скромно-то, всего +40? Не надо жадничать, накрути уж от души

Вот напишу приложение, которое будет кликать в одну точку и запущу )))) Пущай работает )))) А кстати раньше же работало по +1 к карме в час! Что случилось? Изменились правила?

А если честно, то Алексей Кулик так оперативно сработал, что даже жалко было бы поставить ему просто +1. Очень помогло его решение.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Странно. Сколько я не проверял всегда получался правильный путь (т.е. каталог в котором непосредственно находится dll-файл).
Есть еще варианты:
Код - C# [Выбрать]
  1.     string curAssemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
  2.     string curAssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
  3.     string curAssemblyFullName = System.Reflection.Assembly.GetExecutingAssembly().GetName().FullName;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А кстати раньше же работало по +1 к карме в час! Что случилось? Изменились правила?
Я снял это ограничение. Теперь верну назад. Из-за тебя. Не обсуждается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Из-за тебя.

Так я ж от радости, а не от злого умысла...

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
string curAssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
У меня этот метод частенько глючит.
Например на кнопке виси макрос:
Код - Auto/Visual Lisp [Выбрать]
  1. ^C^C_NETLOAD "C://ACAD_DLL//_AddMLeader//AddMLeader_2014.dll";bx_addmleader;
Если запускать именно этим макросом, то библиотека загрузится, но файлы будет искать в C:\Users\user\Documents\, соответственно часто ловлю ошибку типа :
Цитировать
************** Exception Text **************
System.IO.FileNotFoundException: Could not find file 'C:\Users\user\Documents\blockXML.xml'.
File name: 'C:\Users\user\Documents\blockXML.xml''

А если запускать руками, через netload и потом командой, то ошибки нет.
К слову, с My.Application.Info.DirectoryPath таких ошибок не возникает в принципе.