【问题标题】:Can a loaded DLL know where it is located?加载的 DLL 可以知道它的位置吗?
【发布时间】:2010-08-17 08:49:05
【问题描述】:

我正在构建一个供 Office 使用的 DLL。当 Office 与它一起运行时,我想确定它的位置。这可能吗?

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

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

【问题讨论】:

    标签: vb.net dll office-interop


    【解决方案1】:

    即使在 Office 内部运行,以下内容也应该可以工作:

    Getting the path of the current assembly

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这对我有用:

        Environment.CurrentDirectory
        

        所以你可以给它设置一个字符串,例如:

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

        【讨论】:

        • 我看到Environment.CurrentDirectory 返回了调用可执行文件的基本路径。如果您在一个 DLL 中,作为 Windows 服务的一部分被调用,您将获得系统根文件夹的路径..
        【解决方案4】:

        当 DLL 加载时,它使用实例句柄调用 DllMain。如果你实现了这个函数,你就可以记录DLL的实例句柄。从此,您可以致电GetModuleFileName

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

        【讨论】:

          猜你喜欢
          • 2011-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-07
          • 2011-11-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多