我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() 。
AddDllDirectory() 。
SetDefaultDllDirectories() 。
RemoveDllDirectory() 。
使用AddDllDirectory删除已添加到进程DLL搜索路径的目录。
另请参见DLL搜索顺序 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。