【问题标题】:Failed to load a dll in the Temp Directory on a Windows Server在 Windows 服务器上的 Temp 目录中加载 dll 失败
【发布时间】:2013-05-17 21:00:17
【问题描述】:

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

但是我放在服务器上的时候出现了问题。

应用程序在执行点使用 DLL 库 (A.dll),此 A.dll 副本(或在第一次执行时创建)AppData/Local/TEMP 目录中的另一个 DLL (B.dll) .但是当 A.dll 尝试加载 B.dll 时会抛出异常:

system.invalidoperationexception: failed to load B.dll

我尝试以管理员身份运行主 exe,但没有结果。而且我认为权限还可以,毕竟是TEMP目录。

我无法访问 DLL 源,是库。

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

谢谢大家。

【问题讨论】:

  • 您可能想尝试将 DLL 安装到 GAC 中,更多信息在这里 - msdn.microsoft.com/en-us/library/dkkx7f79.aspx
  • 我要安装哪个 dll? A.dll 还是 B.dll?或两者?另一件事是我将使用 Frameworke net 4.0。 gacutil是换4.5的有问题吗?
  • 为什么不把两个dll和.exe放在同一个目录下?
  • 我认为 A.dll 在代码中有,在临时路径中放置/创建/复制 B.dll。我已经尝试将所有内容放在一起,但没有结果

标签: c# windows exception dll permissions


【解决方案1】:

您是否检查过系统不限制临时目录中代码的执行,例如使用 SRP 还是 AppLocker?

这通常在组策略中设置,并且现在通常是一个合理的限制,以防止诸如偷偷摸摸的安装程序和密码锁恶意软件之类的事情。

您可以通过尝试从 %TEMP% 运行可执行文件并查看是否收到拒绝访问错误来验证这一点。

如果是这种情况,您可以尝试重新定位 TEMP(因为 SRP 通常默认将您锁定在 %USERPROFILE%\AppData\Local\Temp 之外,并且移动 Temp 文件夹会产生预期的效果。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2017-04-04
    • 2012-06-18
    • 2012-05-25
    • 2020-06-02
    相关资源
    最近更新 更多