2010-08-17 3 views
2

Я создаю DLL, которая используется Office. Когда Office работает с ним, я хотел бы определить, где он находится. Это возможно?Может быть загружена DLL знать, где она находится?

ex. кода внутри DLL при запуске в офис:

// should return C:\tmp\officeaddin.dll, 
// currently C:\Program Files\Microsoft Office\Office 12 
MessageBox.Show(Application.StartupPath) 

ответ

2

Следующая должно работать, даже если работает внутри офиса:

Getting the path of the current assembly

(Это в основном сводится к Assembly.GetExecutingAssembly().Location, но увидеть ссылка выше для получения более подробной информации.)

+0

красивых благодаря – karlipoppins

0

Когда DLL загружается, он вызывает DllMain с дескриптором экземпляра. Если вы реализуете эту функцию, вы можете записать дескриптор экземпляра библиотеки DLL. Затем вы можете позвонить GetModuleFileName.

В .NET это позаботится о вас. См. Это question и выбранный ответ для деталей.

2

Если это библиотека .NET, вы должны использовать Assembly.GetExecutingAssembly().Location. Application.StartupPath показывает путь к главному приложению.

+0

красивых благодаря – karlipoppins

1

Это работает для меня:

Environment.CurrentDirectory 

Таким образом, вы можете просто задать строку к нему, такие как:

Dim location as String = Environment.CurrentDirectory & "\" 
+0

я вижу, что 'Environment.CurrentDirectory' возвращает базовый путь вызова исполняемого файла. если вы находитесь в DLL, вызывается как часть службы Windows, вы получите путь к корневой папке системы. –

Смежные вопросы