Vb.net 加载的DLL能否知道它位于何处?

Vb.net 加载的DLL能否知道它位于何处?,vb.net,dll,office-interop,Vb.net,Dll,Office Interop,我正在构建一个供Office使用的DLL。当Office运行时,我想确定它位于何处。可能吗 在Office中运行DLL时DLL中的代码示例: // should return C:\tmp\officeaddin.dll, // currently C:\Program Files\Microsoft Office\Office 12 MessageBox.Show(Application.StartupPath) 即使在办公室内运行,以下各项也应起作用: (它基本上归结为Assem

我正在构建一个供Office使用的DLL。当Office运行时,我想确定它位于何处。可能吗

在Office中运行DLL时DLL中的代码示例:

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

即使在办公室内运行,以下各项也应起作用:


(它基本上归结为
Assembly.getExecutionGassembly().Location
,但更多详细信息请参见上面的链接。)

加载DLL时,它使用实例句柄调用DllMain。如果实现此函数,则可以记录DLL的实例句柄。从这里,你可以打电话


在.NET中,这是为您处理的。有关详细信息,请参阅此答案和所选答案。

如果它是.NET库,则应使用
Assembly.getExecutionGassembly().Location
应用程序。StartupPath
显示主应用程序的路径。

这对我很有用:

Environment.CurrentDirectory
因此,您可以为其设置一个字符串,例如:

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

我看到
Environment.CurrentDirectory
返回调用可执行文件的基本路径。如果您在DLL中,作为windows服务的一部分被调用,您将获得系统根文件夹的路径。。