1

我开发了一个在本地运行良好的 C# 应用程序。

但是当我放在服务器上时出现问题。

该应用程序在他的引用中使用了一个 DLL 库 (A.dll),并且在执行时 A.dll 在 Temp 目录中创建了另一个 DLL(嵌入其中,我们称之为 B.dll)。但是当 A.dll 尝试加载 B.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 的同一路径等,但没有结果。

所以在这一点上,我认为这是服务器上的一个安全问题,比如“进程无法加载 DLL”或类似的东西。

例外: http: //i.imgur.com/NmB2Fth.png ?1

任何人都可以建议我任何解决方案?我会检查更好吗?在哪里?

PS 如果我尝试注册 dll,我得到了同样的错误: Register DLL file on Windows Server 2008 R2

4

1 回答 1

2

解决方案很简单。

我使用了一个非常有用的工具,名为Event Viewer (Start->Execute->eventvwr.exe) 当我启动我的应用程序时,Windows Logs->Applications 上显示了一个新的错误事件:

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.

快速搜索,结果是服务器需要Visual C++ Runtime for x86(x86,因为我的应用程序在 32 位应用程序池中工作)

一旦安装了这个包:http ://www.microsoft.com/en-us/download/details.aspx?id=5582

一切都像一个魅力。

我希望这可以帮助任何人节省一些时间!!

于 2013-05-23T11:52:03.007 回答