none
BadImageFormatException, 域用户登录和“Run as administrator” RRS feed

  • 问题

  • 大家好,

    最近我们在.Net Framework的基础上用C#开发了一个桌面应用程序,这个程序在独立的PC上测试的时候没有问题;但是当我们用windows域用户登录一台windows7 64bit PC上再测这个软件的时候,发现它报了一个BadImageFormatException的错误。而如果我们设置让这个程序“run as administrator”的时候,这个错误有没有了,一切恢复了正常。

    请问,应该怎样处理这个问题呢?

    多谢!

    出错的信息如下面所示:

    login error: System.BadImageFormatException: Could not load file or assembly

    'System.Data.SQLite, Version=1.0.6.2.0, Culture=neutral,

    PublicKeyToken=db937bc2d44ff139' or one of its dependencies. An attempt was

    made to load a program with an incorrect format.

    2013年11月8日 5:27

答案

全部回复

  • 你好:

    欢迎来到MSDN中文论坛。

    请参考这篇文章 Compiling .Net for a Specific Target Platform (Any CPU vs x86 vs x64),里面对项目配置中的各个目标平台作了一个总结。

    在64位的机器上面:

    1. 目标平台设置为Any-CPU时,程序会在64位的进程中执行,可以加载64位或者Any-CPU的dll,但是如果加载32位的dll就会报BadImageFormatException错。

    2. 目标平台设置为x86,程序会在32位的进程中执行,可以加载32位或者Any-CPU的dll,但是如果加载64位的dll就会报BadImageFormatException错。

    3. 目标平台设置为x64,程序会在64位的进程中执行,可以加载64位或者Any-CPU的dll,但是如果加载32位的dll就会报BadImageFormatException错。

    最大的可能性就是你的程序是在32位的机器上面编译的,并且目标平台设置为Any-CPU了,但是这时候加载了64位的SQLite;或者你的SQLite安装成了32位的了。请检查一下看看。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月11日 11:11
    版主
  • 感谢Caillen Zhong的回复。

    如果是文中所说的原因,那么程序应该在任何条件下都会出错

    可是在我的这个case中,这个程序

    1. 在独立的计算机中运行不会出错;
    2. 在域用户登录的情况下会出错;
    3. 而如果在域用户登录的情况下,将程序设置为’Run as Administrator‘ 又不会出错。

    我认为这应该是.NET Framework的权限管理出了问题,但是它给的出错信息又是非常的模糊,让我不知从何处下手。


    2013年11月12日 3:46
  • 这个不是安全异常,和权限管理无关。错误信息非常的明确,就是你加载的DLL格式不对。如果权限有问题,你看到的错误应该是文件未找到/不可访问而不是文件格式不对。

    运行procmon看看你的程序到底去哪里找这个sqlite dll及其附带的文件。你应该确认你的程序没有DLL注入漏洞导致应用程序去错误的路径找DLL,你描述的症状很像这样一个缺陷:普通用户登录的DLL搜索路径里存在一个同名但是格式不正确的DLL。如果恶意程序在你的管理员用户的DLL搜索路径放一个攻击性的DLL,你的系统的安全性堪忧。



    Visual C++ MVP

    2013年12月30日 16:20
    版主
  • 谢谢!

    后来发现是安装了360卫士所致,将其卸载,就不出现这个问题了。

    2013年12月31日 3:55