.vshowt.exe和.vshost.exe.manifest 是什么文件呀?
----------------------------------------------------
我发现,生成exe时,就会同步生成这两个文件,我不知这两个文件的作用是什么。
为什么总是同步生成呢?

解决方案 »

  1.   

    http://topic.csdn.net/t/20050507/14/3987220.htmlhttp://msdn.microsoft.com/zh-cn/library/ms185331(VS.80).aspx
      

  2.   

    一、Manifest
    Windows XP通过XML文件来实现这一功能,这些XML文件保存了有关应用程序配置的元数据,这里所说的XML文件,就是Manifest清单文件。
    Manifest事实上就是一个以.manifest为后缀的XML文件,用于组织和描述隔离应用程序及并行组件,其内部的信息如<assemblyIdentity>元素则标识着一个唯一的程序集,和其他信息一起,他们用于COM类、接口及库的绑定和激活,而这些信息,以往都是存储在注册表中的。另外,Manifests也制定了组成程序集的文件及Windows类。二、Manifest的分类
    在Windows XP中,事实上是在.NET中,把Manifests分类为如下几种类型:
    1、程序集Manifests(Assembly Manifests):主要用于描述程序集,管理程序集的名字、版本、资源、依赖程序集。其中共享程序集的Manifests存储在Windows的WinSxS目录中。私有的程序集Manifests则存可以作为一个资源存储在DLL中,也可以存储在应用程序目录下。
    2、应用程序Manifests(Application Manifests):这类Manifests则用于描述隔离应用程序,它管理着此应用程序在运行时要绑定的共享的并行组件的名字、版本。该Manifests可以作为一个文件(.manifest文件)存储在应用程序相同的目录下,也可以作为一种资源嵌入在可执行文件内部(Embed Manifest)。
    3、应用程序配置文件(Application Configuration Files):对于并行组件及隔离应用程序来说,使用这种Manifests来“Override and Redirect”所依赖程序集的版本。
    4、发行配置文件(Publisher Configuration Files):用于重定向并行组件的版本倒另外一个合适的版本的Manifests。此时,被重定向的新程序集应该和原来的旧程序集具有相同的主.次(majou.minor)版本号。三、Windows对于Manifest的处理
    XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别,Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用。
    而XP及其以后的操作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)操作系统再根据DLL的Manifest提供的信息去寻找对应的DLL ,这样就可能区别不同版本的同一个DLL文件。
    这就说明了为什么我的程序可以在2000下面运行,而在XP及2003上无法运行。
    这也使得很多木马可以利用这个特点实现限制安全软件。四、VS2005种的Manifest配置
    使用Visual Studio 2005以后的一个新问题是,VS2005带的8.0新版的C运行库(VC 8.0 CRT)文件在XP以后支持manifest的Windows版本中被调用时,将会check一下Application自身的Manifest,否则将会拒绝被调用,这也就是说,使用Visual Studio开发的Application,Manifest将是必不可少的(搞不懂MS为啥要这样设置,反正与VS2003.NET不同了,也许除了MS自己说的哪些冠冕堂皇的原因,至少这样一来Linux的Wine模拟要麻烦多了)
    不过,如果你的程序是静态链接的,没有使用dll,且只使用了操作系统核心的 Kernel32.dll, User32.dll, Ole32.dll, 或ShDocVW.dll 等,那么你可以不需要考虑Manifest, 可以关掉它。此时,在VS2005种中,project的设置必须是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support 
      

  3.   

    调试时, vs 启动这个 vshost.exe, 再运行你的程序的.是自动从 vs 安装目录下复制过来的, 日期都一样,config 则纯粹是 app.config 的复制.
      

  4.   

    在程序调试时, 和运行时, 你看看有什么区别?      Process p = Process.GetCurrentProcess();
          string l = p.MainModule.FileName;
      

  5.   

    这个进程的作用是什么?
    另外,.vshowt.exe是进程文件 后面的.vshost.exe.manifest是什么文件呢?