C# 无法在具有完全权限控制的Windows 2008 R2中加载DLL
我开发了一个C#应用程序,在本地运行得非常好 但是当我在服务器上安装时出现了一个问题 应用程序在其引用(a.DLL)中使用一个DLL库,在执行点,a.DLL在临时目录中创建另一个DLL(嵌入其中,我们称之为B.DLL)。 但当A.dll尝试加载B.dll时,会引发异常:C# 无法在具有完全权限控制的Windows 2008 R2中加载DLL,c#,windows,dll,windows-server-2008,windows-server-2008-r2,C#,Windows,Dll,Windows Server 2008,Windows Server 2008 R2,我开发了一个C#应用程序,在本地运行得非常好 但是当我在服务器上安装时出现了一个问题 应用程序在其引用(a.DLL)中使用一个DLL库,在执行点,a.DLL在临时目录中创建另一个DLL(嵌入其中,我们称之为B.DLL)。 但当A.dll尝试加载B.dll时,会引发异常: system.invalidoperationexception: failed to load B.dll 我无法访问DLL源,它们是库 因此,总结一下: 进程对文件和路径具有完全控制权限。 (勾选) 正在像管理员一样运行
system.invalidoperationexception: failed to load B.dll
我无法访问DLL源,它们是库
因此,总结一下:
- 进程对文件和路径具有完全控制权限。 (勾选)
- 正在像管理员一样运行。(勾选)
- 在我的应用程序中,如果我尝试以二进制模式打开dll 操作没有问题
- 在我测试过的每个操作系统(Windows 8_64/XP_32)上运行良好/ 2008_32/7_64),但在使用2008 R2 64时失败
- 我尝试过重新下载、重命名、重新安装B.DLL,我将程序放在B.DLL的同一路径中,等等,但没有结果
解决方案很简单 我使用了一个非常有用的工具,名为事件查看器(Start->Execute->eventvwr.exe) 启动应用程序时,Windows日志->应用程序上显示了一个新的错误事件:
Activation context generation failed for "C:\Temp\APP\myfile.dll".
Dependent Assembly Microsoft.VC90.CRT,processorArchitecture="x86",
publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found.
Please use sxstrace.exe for detailed diagnosis.
<> p>快速搜索,结果是服务器需要x86 <代码>代码C++ > VisualC++运行时(x86,因为我的应用程序在32位应用程序池中工作)
安装此软件包后:
一切都很顺利
我希望这将帮助任何人节省一些时间 您还安装了B的所有依赖项吗?是的,正如我前面所说的,在所有其他平台上都运行良好。(不安装任何东西)这种“嵌入式DLL加载器”黑客迟早会失败。再加上一些糟糕的异常处理,你就不知道出了什么问题。“加载失败”当然没有帮助。这是开源的,你可以做得更好。