我想创建一个带有暴露的C函数的DLL,可以访问系统上的应用程序。 是否有更好的方法使其可用而不是修改%PATH%?
因为人们不喜欢将其添加到%PATH%here。
答案 0 :(得分:2)
如果要允许隐式链接到dll,则有三个选项: -
创建包含dll的本机Win32程序集并将其安装到WinSxS。这需要创建一个简单的.manifest文件,使用一些加密工具来签署程序集(作为清单文件和dll),以及创建MSI安装程序 - 或直接调用IAssemblyCache来执行实际安装。 / p>
将dll安装到System32 - 使用此选项,您需要确保dll具有相对独特的名称。
将dll的路径添加到PATH上的某个位置(或修改指向dll的路径)。
如果隐式链接到C函数并不重要,则其他选项: -
创建一个公开c方法的COM接口。在注册表中注册dll的路径,dll的用户使用CoCreateInstance来获取包含该函数的接口。
在注册表中存储dll的路径,并期望dll的用户将该路径与LoadLibrary一起使用,并使用GetProcAddress来加载dll。
答案 1 :(得分:1)
把它放在PATH的某个地方。 (C:\ Windows \ System32 \浮现在脑海中)。如果只需要一个应用程序,只需将其粘贴在同一目录中即可。
答案 2 :(得分:1)
如果使用导入库调用DLL,则它会在当前目录中查找,然后在PATH中查找。
但是,你不需要这样称呼它。您可以自己使用LoadLibrary()和GetProcAddress(),然后执行任何操作。如果仅使用dll名称调用LoadLibrary,它将使用与导入库(当前目录+ PATH)相同的算法 - 如果传递完整路径,它将使用它。
COM使用此技术基于注册表中DLL的完整路径加载DLL - 您也可以在没有COM的情况下执行此操作。
你可以用PATH之外的其他方式搜索它 - 你可以在没有路径的情况下调用,看看是否找到它,然后尝试注册表,然后查看其他地方(每个驱动器的程序文件目录等)。
基本上,如果你自己调用LoadLibrary和GetProcAddress,你可以做任何你想做的事。
答案 3 :(得分:0)
我想最好将它安装到system32文件夹中,忘记%PATH%修改......