A. 求助,dll标记为系统必备组件,对其强制签名
为使用户进程无法访问甚至修改关键的操作系统数据,windows使用了两种处理器访问模式:用户态和内核态。用户应用代码运行在用户态,而系统代码(如系统服务和设备驱动)运行在内核态。内核态指处理器中授权访问所有系统内存并使用所有CPU指令的...
B. 100分,C# 安装包的问题,急急急!
建立“安装部署”项目,在"应用程序文件夹"中添加要发布的程序集,
选项目菜单的属性,单击"系统必备"按钮,选"从与我的应用程序相同的位置下载系统必备组件",
确定,并生成项目即可。会自动在setup程序的Debug文件夹中包含.net和installer
还可以添加快捷方式
C. 计算机的常用文件夹中出现一些*.dll的文件,不知道是什么东西请路过的朋友给指导一下,先谢谢了。
CLR对组件代码的打包、部署和查找有自己的一套概念和技术。
这些概念和技术和COM、java和win32存在着本质上的区别。我们必须先弄清楚代码和元数据是如何打包的。
1.1 模块定义
CLR程序存在模块(mole)中。一个CLR模块是一个字节流,通常作为一个文件存储在本地的文件系统中或者WEB服务器上。
CLR模块采用Windows NT的PE(Portable Exectuable)/COFF(Common Object File Format)可执行文件格式的扩展版。
当CLR编译器对C#、VB.NET等源程序编译后,产生MSIL(微软中间语言)和元数据。
元数据描述代码中的类型,包含每种类型成员的签名、代码引用的成员和运行库在执行时使用的其它数据。
MSIL和元数据包含在一个PE文件中,此文件基于并扩展过去用于可执行内容的已公布的Micorsoft PE和COFF。
CLR模块包含代码、元数据和资源。
模块代码:一般以公共中间语言的格式存放;
模块元数据:描述了模块中定义的类型,包含名字、继承关系、方法签名和依赖信息等。
模块的资源:静态的只读数据,例如,字符串、位图,以及其他没有被存储为可执行代码的部分。
CLR模块格式:
PE/COFF表头 PE头
COFF头
PE/COFF .text部分 IMAGE_COR20_HEADER
代码(CIL和/或本机机器码)
资源数据
字符串/BLOB池
元数据表
CLR模块格式输出选项:
C#/VB.NET C++ 直接可加载? 从Shell中可直接运行? 可访问控制台?
/t:exe /CLR 是 是 总是
/t:winexe /CLR /link /subsystem:windows 是 是 从不
/t:library /CLR /LD 是 否 依赖主机(Host-dependent)
/t:mole /CLR:NOASSEMBLY /LD 否 否 依赖主机(Host-dependent)
选项/t:mole产生“未加工的(raw)”模块,其文件扩展名默认为.netmole。
这种格式的模块不能独立地部署,CLR也不能直接加载它们。
准确地说,开发人员必须在部署前,将这些“未加工的”模块和成型的组件(被称为程序集(Assembly))进行关联。
相比之下,用/t:library选项编译产生的模块,能够包含附加的元数据,允许开发人员将其作为独立代码进行部署。
选项/t:library编译产生的模块,其文件扩展名默认为.DLL。
“未加工的(raw)”模块没有程序集清单。“未加工的(raw)”模块也称作为能添加到其他程序集的模块。
1.2 程序集(Assembly)
为了部署CLR模块,开发人员首先必须将其归属于一个程序集(Assembly)中。程序集就是一个或多个模块的逻辑组合。
尽管程序集可能由多个模块组成,但是一个模块往往只属于一个程序集。假如出现两个程序集都引用同一个公共模块的情况,
CLR将这个公共模块视为两个不同的模块,即公共模块中的每个类型都有两个不同的拷贝。
在CLR中,程序集是部署的“原子”,被用来对CLR模块进行打包、加载、分发以及版本控制(物理的)。虽然程序集可能
包括多个模块以及辅助文件,但程序集本身被作为原子单元进行命名和版本化的。
程序集规定了组件中类型定义的作用域。CLR类型将它们的程序集名/类型名对作唯一标识。
C# VB.NET 意义
类型 Public Public 访问类型不受限制
Internal Friend 类型只在程序集内部可访问
成员 Public Public* 访问成员不受限制
Internal Friend 成员只在程序集内部可访问
Protected Protected 访问仅限于包含类或者包含类派生的子类型
Protected internal Protected friend 访问仅限于包含类以及包含类派生的子类型,或者当前程序集的其它类型。
Private Private 访问仅限于包含类型
*在VB.NET中,通过关键字DIM声明的方法默认为public,而字段默认为private。
程序集名字:
每个程序集的都采用四部分(four-part)名字,作为唯一标识符。这四部分名字由名称、文化、开发人员以及组件版本构成。
这些名字被存放于程序的清单中,以及引用它的所有程序集的程序集清单中。在加载时,CLR使用四部程序集名字找到正确的组件。
程序集的命名约定通常是基于命名空间前缀的。例如,.NET XML被部署在System.Xml程序集中,它包含的所有类型都使用System.Xml的
命名前缀。这仅仅是个约定,而不是规则。例如,类型System.Object存放在mscorlib的程序集中,而不是System的程序集中。
程序集名字的Name属性往往与程序集清单的底层文件名(不包含任何文件扩展明,尽管它们可能有用)相对应。当构建(Build)程序集时,
名字的这个部分是由编译器根据目标文件名自动选择的。
2 CLR类型
2.1 CLR类型
类型是CLR程序的生成快。开发人员在程序集的上下文中创建类型。当开发人员确定了把工程划分成一个或者多个程序集后,
他们的大部分时间就都花在考虑类型是如何工作的,以及类型直接是如何相互关联的。
CLR类型(CLR type)是命名的可重用抽象体。CLR类型的描述存放在CLR模块的元数据中,
该模块还包含使类型工作所需要的CIL或者本机代码。完全限定的CLR类型名包括三部分:程序集名字、可选的命名空间前缀和类型名称。
2.2 命名空间(namespace)
命名空间是一个逻辑的组织系统,开发人员在程序集开发上下文环境中使用命名空间来组织他们的类型系统。
这能帮助程序员在单个程序中使用两个或者多个同名的类型定义,只要它们分属不同的命名空间。这个命名空间前缀是一个字符串,
一般以开发人员的组织名(例如,Microsoft、MyCorp)开始;如果是.NET Framework的一部分,则以System开始。
3 小结
1)程序集用于组件的打包、部署、分发以及版本控制;命名空间前缀用于类型系统的逻辑划分。
2)程序集的名字由四部分组成,而其Name属性往往与程序集清单的底层文件名(不包含任何文件扩展明,尽管它们可能有用)相对应。
3)程序集的命名约定通常是基于命名空间前缀的,但这不是必须的。
4)如果要用到其它程序集中的类型,可以有两种方式:显式的和隐式的。通常我们都使用隐式的,这种方式不需要开发人员和程序集加载器进行显式的交互。只要在编译我们的程序集时,将需要的外部程序集使用/reference:<file>选项链接进来即可;如果使用显式的方式,开发人员可以使用System.Reflection.Assembly类的LoadFrom静态方法。
5)通常开发人员在自己的程序集上下文环境中时,主要打交道的是类型,以及类型的逻辑组织(namespace prefix)。
6)这里有两种主要的程序集种类,应用程序(.exe)和库(.dll)。
D. 如何:在 Windows Installer 部署中安装系统必备组件
大多数应用程序都拥有系统必备组件。所谓系统必备组件,是指要在目标计算机上运行应用程序,该计算机上必须具备的组件,如 .NET Framework 运行库。Visual Studio 中的部署工具提供了在安装期间自动检测组件是否存在,并安装一组预先确定的系统必备组件的功能,即一个称作 bootstrapping 的进程。对于Windows Installer 部署,.NET Framework 的引导是默认启用的。您可以对 .NET Framework 禁用引导,但只有在确定所有目标计算机上均已安装正确版本的 Framework,或者应用程序不需要 Framework 的情况下才可以禁用此功能。注意对于已本地化的应用程序,如果部署项目的“Localization”属性设置为“英语(美国)”以外的区域设置,则还会引导 .NET Framework 语言包。附加组件应只有在应用程序依赖它们时才引导。默认情况下,引导的组件通过组件供应商的网站进行部署。组件供应商网站的其他替换选择包括:从应用程序安装所在的位置(可以是文件共享、本地磁盘或 UNC 文件共享)安装组件。从指定的本地路径、URL 或文件共享位置安装。注意下面的过程适用于 Windows Installer 部署。若要使用 ClickOnce 应用程序安装系统必备组件,请参见如何:与 ClickOnce 应用程序一起安装系统必备组件。注意显示的对话框和菜单命令可能会与帮助中描述的不同,具体取决于当前的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。选择要安装的系统必备组件在“解决方案资源管理器”中,选择部署项目。在“项目”菜单上单击“属性”。在“属性页”对话框中,展开“配置属性”节点,然后选择“生成”属性页。单击“系统必备”按钮。在“系统必备”对话框中,确保选中“创建用于安装系统必备组件的安装程序”复选框。在“请选择要安装的系统必备组件”列表中,选中希望安装的系统必备组件,然后单击“确定”。指定系统必备组件的下载位置在“解决方案资源管理器”中,选择部署项目。在“项目”菜单上单击“属性”。在“属性页”对话框中,展开“配置属性”节点,然后选择“生成”属性页。单击“系统必备”按钮。在“系统必备”对话框中,选择一个位置:如果要将系统必备组件的安装程序部署到供应商,请单击“从组件供应商的网站上下载系统必备组件”。如果要将系统必备组件的安装程序部署到与应用程序安装程序相同的位置,请单击“从与我的应用程序相同的位置下载系统必备组件”。如果要将系统必备组件的安装程序部署到另一个位置,请单击“从下列位置下载系统必备组件”,然后输入一个本地路径、URL 或文件共享位置。注意必须确保系统必备组件的安装程序已复制到指定位置,并在该位置为每个系统必备组件分别准备了一个子文件夹。注意 “属性页”对话框中的“安装 URL”指定用于安装应用程序和/或系统必备组件的服务器或网站的 URL。有关 Windows Installer 如何使用此 URL 的信息,请参见“部署项目属性”对话框 ->“配置属性”->“生成”。单击“确定”继续。禁用引导在“解决方案资源管理器”中,选择部署项目。在“项目”菜单上单击“属性”。在“属性页”对话框中,展开“配置属性”节点,然后选择“生成”属性页。单击“系统必备”按钮。在“系统必备”对话框中,清除“创建用于安装系统必备组件的安装程序”复选框,然后单击“确定”。 注意如果禁用引导,则在尚未安装系统必备组件的情况下,仍将安装应用程序,但应用程序可能不会运行。对于 Windows Installer 部署,可以包含启动条件以检查系统必备组件,并在找不到系统必备组件时停止安装。有关更多信息,请参见在部署中启动条件管理。
E. c#打包的时候,加入.netframework系统必备,如何做
1. 创建安装向导项目或安装部署项目
新建项目-〉其他项目类型-〉安装与部署-〉安装向导(或安装部署),如命名为setup。
2. 将要打包的项目导入到这个安装项目中,有两种方式:
第一种,自动方式,在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目,这样就会把这个项目添加到该解决方案中来,
然后在安装项目setup上右击-〉添加-〉项目输出-〉主输出,在项目下拉框中选择刚添加的项目,选择这样就会把这个要打包的项目的基本文件添加到左侧的应用程序文件夹中,名字为主输出来自**(活动)。
第二种,手动方式,右击左侧的应用程序文件夹(这个文件夹就是要打包的项目中需要的文件)-〉添加-〉文件或文件夹,主要是exe文件和其他配置文件或数据文件。
在第一种方式中,系统会自动将要打包的项目所依赖的依赖项添加到“检测到的依赖项”中,如Microsoft .Net Framework,如果没有就需要手动添加了。
在第二种方式中,依赖项需要手动添加,右击项目-->添加-->合并模块,选择要添加的文件,.Net Framework是必须的,位于:C:\Program Files\Common Files\Merge Moles\ 下。
注意在第一种方式中,如果要打包的项目有配置文件或数据文件等其他,还需要手动将它们添加到应用程序文件夹中。
F. 错误(10009): 未找到对应的窗口。 (易语言)
你自己看看你的代码,显示不全,显示
??? () ' <!!!>
这是缺少模块或者支持库才显示那样的情况,请先确定你没有少模块或者支持库,然后再看下代码有没有错漏的地方
G. Microsoft.Office.Interop.Word.dll
解决此问题,Microsoft 建议从 添加或删除程序 控制面板中运行 Office 安装程序:
如果 PIA 不会出现在 GAC 中,运行 Office 安装程序,然后标记为 从本机运行 应用程序 PIA。 每个 Office PIA 显示为 .NET 可编程性支持 功能为相应的 Office 应用程序或相应的 Office 组件。
如果 PIA 会出现在 GAC 中,请运行 Office 安装程序,然后选择修复 Office 安装选项。 或者,如果 PIA 不会出现在 GAC 中,可以运行 regasm 实用工具在还原丢失的注册表项。
在控制面板中双击 管理工具 ,然后选择 Microsoft.NET Framework 1.1 配置 。
选择 程序集缓存 ,然后单击在 视图 菜单上的 程序集 。
在 程序集 列表中右击 程序集 ,然后单击 属性 。
在 程序集属性 对话框,请注意 程序集名称 、 版本 并且 公用密钥标记 。
是例如如果您选择 Microsoft Word PIA,您注意到下面的属性值:
程序集名称: Microsoft.Office.Interop.Word
版本: 11.0.0.0
公用密钥令牌: 71e9bce111e9429c
启动 Visual Studio.NET 命令提示符。
在命令提示符下更改到程序集所在的目录。
在的路径是采用以下形式:
%windir%\assembly\GAC\ <assemblyname> \ <version> _ _ < 公钥标记 >
是例如如果您使用 Word PIA 前面提到的属性值,必须更改到目录 Word PIA 使用下面的命令的位置:
cd %windir%\assembly\GAC\Microsoft.Office.Interop.Word\11.0.0.0__71e9bce111e9429c
请运行 regasm 实用工具还原 Word PIA 注册表项:
H. 我用c# windows窗体程序打包选择从与我的应用程序相同的位置下载系统必备组件报错
我用2005打包的时候选得时从组建供应商下载那个选项,在别的电脑商装了可以用的,还做了个卸载功能,都能实现的。
I. mastercam2022安装程序集组件时出错
mastercam2022安装程序集组件时出错通过以下方法解决。
1、点选开始菜单后的设置。
2、在弹出的菜单中选择更新和安全。
3、选择恢复中的立即重启。
4、重启后选择疑难解答。
5、选择高级启动中的启动设置,点击重启按钮。
6、按提示输入7禁用驱动程序强制签名后,重新安装驱动即可。
J. 未能加载文件或程序集“CrystalDecisions.CrystalReports.Engine, Version=10.2.3600.0,
工程名右键->属性,可以看到该工程的一些默认设置,选择“发布”选项卡,可以看到有一项叫“安装模式和设置”,单击该项的“系统必备”弹出一个对话框,选中列表框中相关的程序集,“指定系统必备组件的安装位置”选择第二项,然后“确定”。这时候再发布该项目就可以了,生成的安装文件就包含了需要的程序集。