微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调整dynamic加载的本机DLL的%PATH%?

我dynamic加载一个.NET程序集,这个程序集依赖于位于不同文件夹中的几个本地 .dll文件。 但是,只有在我的应用程序启动时,Windows的文件夹位于PATH环境variables中,Windows才能find这些DLL。

我想从我的程序修改我的PATHvariables,以允许find必要的库。 根据MSDN “search顺序如下:…在PATH环境variables中列出的目录”。

哪个PATH环境variables的实例被使用?

每个进程都有一个实例。

我试过Environment.SetEnvironmentvariable("PATH",...)但没有帮助。 我也尝试了SetDefaultDllDirectories()与AddDllDirectory(),但这些也没有任何区别。

有没有办法部署.Net应用程序而不使用MSI?

尝试安装Windows服务时,InstallUtil.exe被删除

与本地Windows服务进行通信的“正确”方式

WebClient强制超时

使内存密集的后台应用程序“友好”

症状是,当启动我的.exe(从CMD提示符 – 它是一个控制台应用程序) %PATH%包含必要的文件夹时,ProcessMonitor显示本机.dll被探测到所有的PATH文件夹,并最终find。

但是当%PATH%在启动的时候没有包含必要的文件夹时,只能在.exe文件夹和SYstem32中探测本地的.dll文件(尽pipe%PATH%包含更多的文件),而不pipe上面提到的SetEnvironmentvariable ()/ SetDefaultDllDirectories()/ AddDllDirectory()调用

这是怎么回事? 我究竟做错了什么? 为什么我无法有效地调整stream程的PATH?

注意:AppDomain.AssemblyResolve事件不能帮助我,因为在本地.dll加载其他本机.dll时它不会被触发。

用于远程Web服务的Windows虚拟磁盘

在线程中调用列表框

线程在被告知这样做的时候没有睡觉

有没有一种方法/工具来显示系统中的所有内存映射文件

我可以在Windows XP或7上使用最新的.NET框架吗?

那是因为每个进程都从产生它的进程继承它的环境。 而且微软公司的这种做法在执行过程中可能会改变,所以CLR在流程执行过程中永远不会刷新环境(也没有为流程本身提供一种手段)。 有关详细信息,请参阅http://social.msdn.microsoft.com/Forums/vstudio/en-US/acf2d0f3-143e-4ba5-acdc-76a70a5c9830/environment-variables-refresh?forum=csharpgeneral 。

由于加载程序正在通过正常的Win32方式解析对非托管DLL的引用,因此您应该查看P /调用这些Win32函数来更改Win32 LoadLibrary()和LoadLibraryEx()使用的DLL搜索顺序:

SetDllDirectory() 。

将目录添加到用于查找应用程序的DLL的搜索路径。

AddDllDirectory() 。

一个目录添加到进程DLL搜索路径。

SetDefaultDllDirectories() 。

指定调用进程加载DLL时要搜索认目录集。

RemoveDllDirectory() 。

使用AddDllDirectory删除添加到进程DLL搜索路径的目录。

另请参见DLL搜索顺序 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐