Page tree
Skip to end of metadata
Go to start of metadata

按照以下步骤,完成ComponentOne OLAP for WinForms的卸载工作:

  1. 打开控件面板,然后选择添加或删除程序选项(Windows 7/Vista中选择程序和功能选项)
  2. 选择Component One OLAP for WinForms选项,然后单击删除按钮。
  3. 单击Yes按钮,删除项目。

按照以下步骤,完成ComponentOne OLAP for WinForms帮助文档的卸载:

  1. 打开控件面板,然后选择添加或删除程序选项(Windows 7/Vista中选择程序和功能选项)
  2. 选择Component One Studio for WinForms Help选项,然后单击删除按钮。
  3. 单击是按钮,删除项目。


终端用户许可协议

所有的ComponentOne许可信息都可以在通过以下网址在线获
取:http://www.componentone.com/SuperPages/Licensing/信息中包含了ComponentOne终端用户许可协议,常见许可相关问题解答,以及ComponentOne许可模型。

许可常见问题解答

本章节将描述许可的主要技术内容。它将帮助用户理解以及知道如何解决ComponentOne下.NET和ASP .NET产品使用过程中遇到的问题。

什么是许可?

许可是一种用于智能保护属性的机制,来确保用户通过授权使用软件产品。
许可不仅用于阻止非法分发软件产品。许多软件开发商,包括ComponentOne,都使用许可来允许潜在的客户在他们购买软件之前对软件产品进行试用。
如果没有许可,这种类型的软件分发对于软件开发商就不具备可行性,同时用户也无法得到很好的体验。开发商或者只能发布带有限制功能的软件评估版本,或是将许可的管理权限移交给客户。然而,客户很容易忘记当前使用的是评估版本,自己还没有购买该软件。许可如何工作?
ComponentOne使用一种基于微软标准设置的许可模型,它对所有的组件类型均能起到功效。

注意:因为平台差异问题,CompactFramework组件相比于其他ComponentOne组件,使用一种不同的run-time 机制。

当用户决定购买一个软件产品,他将收到一个安装程序包以及一个序列号。在安装过程中,系统将提示用户输入序列号,并保存到系统中。(用户同样可以在任何ComponentOne产品上的AboutBox选项下单击License按钮来输入序列号,如果序列号有效的话。或者,用户可以返回到安装过程中,在许可对话框中输入序列号)
当一个通过许可的组件添加到表单或者网页中,Visual Studio将从新建组件中获取它的版本号以及许可信息。当Visual Studio请求序列号时,组件将寻找存储在系统中的许可信息并生成一个运行时许可和一个版本信息。Visual Studio将这些信息保存在下面两个文件中:
一个集合资源文件中将包含实际的运行许可
"licenses.licx"文件将包含许可组件的强命名以及版本信息
这些文件将自动添加到工程中。
在WinForms以及ASP .NET 1.x应用中,运行许可作为一个嵌入资源存储在Visual Studio中的组件或者控件的集合中。在 ASP .NET 2.x应用中,运行许可也许同样会作为一个嵌入资源存储在集合中,这个App_Licenses.dll集合主要用于存储所有组件的运行许可,它由应用中的WebForms控制。
licenses.licx文件是一个简单文本文件,其中包含了应用中使用组件许可的强命名以及版本信息。无论Visual Studio何时调用应用资源,该文件将被读取,并作为一个组件列表来查询嵌入到应用集合资源中的运行许可。需要注意的是,在这个文件中编辑或者添加适当内容,可以让Visual Studio强制添加其他控件的运行许可。

注意: licenses.licx文件并不显示在解决问题浏览器中;如果你单击了解决问题浏览器工具栏中的ShowAllFiles按钮后,它才会显示,或者你可以在Visual Studio主菜单的Project菜单中,选择ShowAllFiles选项。

然后,当用户在运行时创建组件时,组件中将包含从对应集合资源中获取到设计时创建的运行许可,并且将决定是否接受运行许可,还是抛出异常,或者是显示提示信息,提示用户软件还未注册。
所有ComponentOne软件产品在产品未注册时,都将显示许可相关信息。软件并不会抛出异常或者组织应用运行。

常用场景

下面的章节将介绍一些你可能会遇到的许可相关场景。
设计时创建组件这是一个最简单而且最常见的场景。用户添加一个或者多个控件到表单中,将许可信息存储在licenses.licx文件中,然后组件就可以工作了。

注意:Windows Forms平台和Web Forms(ASP .NET)平台的工程其实现机制是一样的。

运行时创建组件

这同样是个常见的场景。在表单中,你并不需要一个组件的实例,但是仍然想要在运行时创建一个或者多个组件实例。在这种情况下,工程中并不包含licenses.licx文件(或者文件中并不包含一个适当的组件运行许可),事情仍然可以像预期那样进行工作。(当licenses.licx创建后,组件可以从表单中移除。)因此,许可将会失效。
想要解决这个问题,需要增加一个组件实例到工程中的表单里。这将创建一个文件,然后事情将像预期那样进行工作
(当licenses.licx创建后,该组件可以从表单中移除。)
增加一个组件实例到表单中,然后删除该组件,就是一个将组件强命名添加到licenses.licx文件中最简单的方式。如果需要,你可以使用notepad或者Visual Studio本身打开文件,然后添加这些文本。当Visual Studio重建应用资源后,你可以在资源中找到组件,同时它的运行许可将被添加到合适的资源集合中。

从已注册的组件中继承


如果你需要创建一个从已经注册过的组件中继承许可信息的组件,那么表单中仍然需要存储许可信息。使用下面两种方式,可以实现这一过程:
在组件中增加一个属性
该操作会将派生类标注为已注册。当组件添加到表单中时,Visual Studio将会创建并管理licenses.licx 文件,基类可以像平时一样调用许可进程。不需要任何其他的附加工作,
例如:
[LicenseProvider(typeof(LicenseProvider))] class MyGrid: C1.Win.C1FlexGrid.C1FlexGrid
{
// ...
}
在表单中增加一个基础组件
该操作像上一场景中那样,将许可信息嵌入到licenses.licx文件中,这样基类就可以找到并 使用它。和之前一样,增加的实例可以在licenses.licx文件创建后删除掉。
请注意,如果运行许可就像派生类模板那样嵌入到同样的集合中并且集合是一个DLL时,C1许可将不接受派生控件的运行许可。这种限制对阻止那些在其它没有设计许可的应用中使用的派生控件类是非常重要的。如果你创建了一个这样的集合,你需要在运行组件前执行一个动作。


在控制台应用中使用已注册组件

当你生成一个控制台应用时,这里没有可以添加组件的表单,Visual Studio将不会创建licenses.licx文件。
在这种情况下,你需要创建一个临时Windows表单,用于添加所有需要的已注册组件。然后关闭Windows表单,将 licenses.licx文件拷贝到控制台应用工程中。
确定licenses.licx作为一个嵌入资源已经完成配置。想要完成这一操作,在解决问题浏览器窗口右键单击licenses.licx文件,然后选择Properties。在属性窗口,将BuildAction属性设置为EmbeddedResource。

Visual C++应用中使用已注册组件

这是一个在VC+2003中出现的问题:licenses.licx文件在生成过程中被忽略。因此,VC+应用中将不会包含许可信息。想要解决这个问题,需要采取额外的步骤编译许可资源,并且将它们连接到工程中。注意以下步骤:

  1. 和以前一样,创建一个C++工程。这里将会创建一个.exe文件以及一个包含许可信息的licenses.licx文件。
  2. 从app路径下将licenses.licx文件拷贝到目标文件夹(Debug或者Release)
  3. 将C1Lc.exe和licensed.dlls拷贝到目标文件夹,(不要使用标准的lc.exe,它包含bug)
  4. 使用编译文件。命令行如下所示:

c1lc/target:MyApp.exe/complist:licenses.licx
/i:C1.Win.C1FlexGrid.dl

  1. 将许可连接到工程中。想要完成这个工作,返回到Visual Studio中,右键单击工程,选择属性,然后进入到

Linker/Command Line选项,输入下述代码
/ASSEMBLYRESOURCE:Debug\MyApp.exe.licenses

  1. 重新生成可执行文件,从而在应用中包含许可信息。


自动测试产品中使用已注册组件


动态加载集合的自动测试产品会将集合显示在许可对话框中。因为测试应用类型并不包括中药的许可信息,这一步骤是非常必要的,并且没有任何更简单的方法来处理它。
用户可以通过添加"C1CheckForDesignLicenseAtRuntime"字符串到由ComponentOne控件派生或者包含集合的 AssemblyConfiguration属性,避免这一问题的发生。这一属性值由ComponentOne控件直接指定,主要用于在运行时使用设计许可。
例如:
#if AUTOMATED_TESTING
[AssemblyConfiguration("C1CheckForDesignLicenseAtRuntime")]
#endif
public class MyDerivedControl : C1LicensedControl { // ...
}
需要注意的是,AssemblyConfiguration字符串在字符串赋值之前或者之后,将包含附加文本,因此 AssemblyConfiguration字符串同样可以用于其他目的。例如:
[AssemblyConfiguration("C1CheckForDesignLicenseAtRuntime,BetaVersion")]
这个方法仅能用于场景描述。它需要在测试机器上安装的设计许可。分发或者是在其他电脑上安装许可的行为,是违反了EULA规定的。


问题诊断

我们尝试尽可能的让许可机制保持低调,不引起人们的注意。但是仍然会有大量的原因导致问题发生。下面是最常见问题的描述以及相应的解决方案:
我拥有一个ComponentOne 产品的许可版本,但是我再启动程序时出现版权页面。
如果发生这个问题,可能是工程中的licenses.licx文件出现了问题。或许是文件不存在,或是包含了错误的信息,或是没有正确配置。
首先,尝试全部重新生成(在Visual Studio的Build菜单中,选择RebuildAll)。这一操作通常情况下会重新生成正确的许可资源。
如果失败,请完成以下步骤:

  1. 打开受影响的工程
  2. 选择一个升级组件实例
  3. 在Visual Studio属性窗口,改变任意一个属性。你选择哪个属性并不重要,你稍后可以将其改回原来的值
  4. 使用RebuildAll选项(不仅仅是Rebuild选项)重新生成工程,然后运行解决方案。

方案1步骤:

  1. 打开一个新的Visual Studio .NET工程
  2. 将更新组件添加到表单中。
  3. 编译并运行新的工程。
  4. 在新工程中打开文件licenses.licx。
  5. 在文件中从更新组件的命名空间处开始,到公共键标记结束。将内容拷贝下来。
  6. 打开已存在许可错误的工程。
  7. 打开新工程的licenses.licx文件。
  8. 将步骤5中拷贝下来的内容粘贴到这个文件中(使用新的内容替换原有的许可信息)。
  9. 使用Rebuild All 选项(不仅仅是Rebuild选项)重新生成工程,然后运行解决方案。

方案2步骤:

  1. 打开受影响的工程。
  2. 从工程中删除licenses.licx文件。
  3. 将一个更新组件新实例添加表单中。
  4. 重新生成并运行解决方案。提示信息将不再显示。
  5. 将新增的组件从表单中移除。

如果有必要的话,请尝试多种解决方案。如果仍然无法解决问题,你是否可以使用代码而不是在设计时创建控件?如果可以,你需要为控件添加一个实体到licenses.licx文件中(详情请参
http://helpcentral.componentone.com/PrintableView.aspx?ID=1886了解更多信息)。如果这是一个网站,与ASP
.NET web应用相反,请尝试右键单击licenses.licx文件,从上下文菜单中选择"BuildRuntimeLicenses"选项。

我在Web服务器上安装了一个ComponentOne 产品的许可版本,但是组件仍像未注册那样工作

作为服务端并不用于开发,将不需要安装任何的许可到机器上。
在开发机器上,组件必须通过许可,从而当工程生成时,将许可信息保存到可执行文件中(.exe或者是.dll)。完成之后,应用可以在任何机器上进行开发,包括Web服务器。
对于ASP .NET 2.x 应用,请确认在开发应用的过程中App_Licenses.dll集合已经创建,并且配置到Web服务器上的bin应用bin路径下。
如果你的ASP .NET应用使用包含已注册控件成分的WinForms 用户控件,运行许可将其纳入到WinForms用户控件集合中。在这种情况下,当嵌入到控件中的许可升级后,你需要重新生成并升级用户控件。
我下载了一个曾经购买过的组件的最新版本,但是生成项目时进入版权页面。
请确认序列号是否有效。如果你已经注册了组件超过一年的时间,你的订阅可能已经过期,在这种情况下,你有两种选择:
选择一:重新订阅,获取新的序列号:选择一:重新订阅,获取新的序列号:
如果你选择这一选项,你将得到一个新的序列号。你可以用这个序列号注册新的组件(在初始化功能中,或是直接通过关于对话框)。
新的定于将允许你在一整年内更新一集下载最新的维护升级版本,下载路径为:http://prerelease.componentone.com/.
选择二:继续使用你现有的组件:选择二:继续使用你现有的组件:
订阅虽然过期,但是产品并没有过期。你可以继续使用你已经得到或者下载的组件,无论你的订阅是否有效。

技术支持

ComponentOne提供各种支持选项。完整列表以及每一种技术支持的描述信息,请访问网站地址:http://gcdn.gcpowertools.com.cn/GoldService/ 一些包含技术支持的方案如下所示:
在线资源在线资源
ComponentOne为客户提供FAQs表单,实例以及视频,历史发布版本,可搜索的基础知 识,可搜索的在线帮助以及其他等等综合技术资源。我们推荐这里作为寻找你的技术问题 解决答案的第一选择。
通过我们的事件提交表单实现在线支持通过我们的事件提交表单实现在线支持
这种在线支持的方式允许你直接与我们的技术支持工作人员通过进行onlineincident submissionform联系。当你提交一个事件后,你将会立即接到回复邮件,确认你已经成功 创建了一个事件。电子邮件里面包含了你的问题引用ID,并基于我们的知识为你提供一系 列的可行的解决方案。你将会在两个工作日或者更短的时间内接到一封由ComponentOne 部门员工撰写的回复邮件。
产品论坛产品论坛
ComponentOne的产品论坛允许用户分享信息,提示以及基于ComponentOne产品的技术 问题。
ComponentOne开发者将允许在论坛中分享内部提示,技术以及回答用户的问题。 请注意,ComponentOne用户账号同样可以在ComponentOne产品论坛中使用。
安装问题安装问题
注册用户在安装ComponentOne产品时,将得到帮助。使用online incident submission form联系技术支持,或是拨打电话(400-657-6008)。请注意,这里无法处理在应用中分发产品到终端用户的相关问题。
文档文档
微软综合ComponentOne文档安装在我们所有的产品中,同时文档还可以在线阅读。如果 你在提升文档方面有更好的建议,请给文档团队发送邮件。请注意,将邮件发送给文档团队 将只反馈文档相关内容。技术支持和销售问题将会直接发送给它们各自所属的部门。

注意:注意:你需要创建一个ComponentOne账号,并使用有效序列号注册你的产品,从而获得上述方法的支持。

可再发行文件

ComponentOne OLAP for WinForms是由葡萄城公司研发以及发布的。你也许想要在微软的Visual Studio平台或是其他编译环境下使用lib来开发应用,这样可以让用户使用并且集成控件(或者多个控件)。你也许想要免费分发带有可再发行文件的应用。这些你开发的应用可以在独立运行网络环境下的在单核客户端/工作站侧。
C1.Win.Olap.dll
C1.C1Pdf.2.dll
C1.Win.C1Chart.2.dll
C1.Win.C1FlexGrid.2.vll
C1.Win.Olap.4.dll
C1.C1Pdf.4.dll
C1.Win.C1Chart.4.dll
C1.Win.C1FlexGrid.4.mll 关于文档
感谢感谢
Microsoft,Windows,WindowsVista,WindowsServer,和VisualStudio都已经注册商标或者注册了美国以及其他国家的微软公司商标。
联系我们联系我们
如果你对于新功能或者控件有任何意见或者好的建议,请联系我们,联系方式如下所示:
400-657-6008
http://gcdn.gcpowertools.com.cn/GoldService/ 命名空间
命名空间主要用于组织集合中的对象。集合中可以包含多重命名空间,还可以循环包含其他命名空间。当用户使用大量的对象如类库时,命名空间可以防止含糊和简单引用。
OLAP for WinForms的命名空间是C1.Win.Olap。下述代码片段显示如何使用类全称来描述一个C1OlapPage组件。
Visual Basic

VB

Dim OlapPage1 As C1.uin.Olap.C1OlapPage

C#

C#

C1.Win.Olap.C1OlapPade OlapPage1;

命名空间地址有时会出现一个叫做namespacepollution的问题,这个问题发生在开发者的类库被其他库文件中的相同命名空间干扰的时候。这些已有组件的冲突有时被称为collisions。
例如,如果你创建了一个叫做C1OlapPage的新类,你可以在你的工程中无限制的使用它。。然而,C1.Win.Olap集合同时实现了一个叫做的C1OlapPage类。因此,如果你想要在一样的工程中使用C1OlapPage类,你必须使用它的完整引用来创建唯一引用。如果该引用并不是唯一的,Visual Studio .NET将会产生一个命名歧义的错误。下面的代码证明如何描述这些对象: Visual Basic

VB

' Define a new C1OlapPage object

Dim MyOlapPage as C1OlapPage
' Define a new C1Olap.C1OlapPage object.
Dim C1OlapPage as C1.Win.Olap.C1OlapPage
C#

C#

// Define a new C1OlapPage object
C1OlapPage MyOlap; // Define a new C1Olap.C1OlapPage object.
C1.Win.Olap.C1Olap C1OlapPage;

完整命名是一个对象引用,它使对象定义的命名空间名称的前缀。你可以在其他项目中使用定义后的对象,如果你创建了一个类引用(从Project菜单中选择AddReference选项),然后在你的代码中使用对象的完整命名。
完整命名将防止命名冲突,因为编译器可以分辨哪一个对象正在使用。然而,命名背身变得很长而且难以处理。想要解决这一问题,你可以使用Imports声明(在中使用)来定义一个别名-一个可用于替代完整命名的缩写,下面的代码将创建两个完整命名的缩写,然后使用这两个缩写来定义对象:
Visual Basic

VB

Imports C1OlapPage = C1.Win.Olap.C1OlapPage
Imports MyOlapPage = MyProject.C1OlapPage

Dim s1 As C1OlapPage
Dim s2 As MyOlapPage

C#

C#

using C1OlapPage = C1.Win.Olap.C1OlapPage; using MyOlapPage = MyProject.C1OlapPage;

C1OlapPage s1;
MyOlapPage s2;

如果你使用不带别名的Imports语句,你可以使用所有的在命名空间中的名字而没有任何限制,因为这些名字在工程中都是唯一的。

  • No labels