2009-09-01 53 views
0

从本地C应用程序调用的混合模式DLL无法加载: 未知模块中发生未处理的“System.IO.FileLoadException”类型异常。从网络共享启动应用程序时混合模式C++ DLL函数调用失败。从非托管c应用程序调用

其他信息:无法加载文件或程序集'XXSharePoint,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = e0fbc95fd73fff47'或其某个依赖项。无法授予最低权限请求。 (来自HRESULT的异常:0x80131417)

我的环境是:本地C应用程序调用混合模式C++ DLL,然后加载C#DLL ..这从从本地驱动器加载时正常工作,但从网络驱动器,它会因上述消息而失败。

对LoadLibrary的调用成功,GetProcAddress也一样。我调用该函数时发生加载错误。

我已经对C应用程序进行了数字签名,并且对2个DLL执行了“强名”签名。上面的消息中的PublickKeyToken与命名的DLL匹配。我还在我的客户端上发布了CASPOL命令,授予FullTrust这个强名密钥。当失败时,我尝试使用CASPOL命令将FullTrust授予网络驱动器的URL(包括我的应用程序目录的路径);结果没有变化。

我试着删除所有的依赖关系,以便只有最初的混合模式DLL ......我用一个“成功”整数值的返回值替换了所有函数的主体。结果不变。只有当我将其从混合模式更改为Win32,并且将配置属性>>常规>>公共语言运行时支持从“公共语言运行时支持”更改为“没有公共语言运行时支持”时,调用DLL才产生预期结果返回“成功”整数返回值)。

回答

1

您没有权限执行此共享上的代码。我认为你不能从共享中执行任何.NET应用程序。试一试,在共享上放置一些.NET可执行文件,然后尝试执行它。如果它不起作用,则必须在.net配置中添加权限才能使用该共享。

+0

根据我的理解,向DLL添加强名称签名,然后使用CASPOL命令在客户端计算机上授予强名称FullTrust权限是必要的。我做了这两件事,但结果是一样的。 – Steve 2009-09-02 16:56:00

+0

这不是一个签名问题。必须将.NET Framework配置为从共享中执行FullTrust。 打开.NET Framework 2.0配置应用程序(控制面板...) 在运行时安全警报>警报>代码组添加新代码组 选择条件类型URL 然后指定您的共享路径作为URL 使用现有权限设置“FullTrust” ,它会工作。 使用此代码组,您可以控制共享的权限。 – 2009-09-03 20:15:54

相关问题