2008-11-12 41 views
2

我有一个Windows应用程序(VS2005/C#),它有Enterprise和Pro两个版本。在Pro版本中,某些功能和菜单被禁用。目前,我正在通过评论禁用代码来创建企业版本,然后将每个可执行文件复制到另一个位置。显然这个过程充满危险...... :)Visual Studio中的配置和程序功能Windows应用程序

我想为我的两个可执行文件有两个文件夹,并且visual studio应该把代码禁用Pro版本中的功能,并把它们放在他们的正确的文件夹我有安装程序项目,将从那里拿起文件,并为这两个版本的安装程序。该部分已经在工作,但在构建安装程序之前,我手动将两个可执行文件复制到正确的文件夹中。所以它吮吸......

我希望做的是这样的:

#ifdef PROVERSION 
part1.disable(); 
part2.disable(); 
#endif 

这可能与Visual Studio ???

请注意,我的总体目标是自动创建两个安装程序的过程。

回答

2

从生成菜单,选择配置管理器选项

在活动解决方案配置下拉列表中选择“新建”

创建PRO两新“配置”一加一为企业

关闭配置经理。

打开项目属性(从项目的上下文菜单) 选择构建选项卡

选择PRO配置(可从配置下拉列表)

输入您编译常数“PROVERSION”入条件编译符号文本框。

现在,您只需从主工具栏上的配置下拉列表中选择要构建的配置,然后进行构建即可。

当您使用PRO配置构建PRO时,散布在代码中的编译器编译指示(#IF PROVERSION)将包含限制您的功能集的代码。

,如果你想具体包括在企业构建企业特点(与在PRO构建禁用企业功能),你也可以考虑设置为企业配置的企业不断

+0

这正是我曾尝试过的一点,但我无法实现它的工作。对不起,我忘了提及,但这就是为什么我在标题中使用“配置”的原因。我会尽力而为。这正是我想要的 - 将每个文件放在正确的文件夹中,加密器可以从那里接收。 – Jasmine 2008-11-12 06:17:31

+0

这个工作非常好BTW,一旦我终于得到我的配置全部理顺和使用#IF而不是#IFDEF – Jasmine 2008-11-19 22:59:08

0

为什么不创建一个单独的程序集,以根据需要启用/禁用这些功能?然后,只需包含特定版本的适当装配...

0

您使用的是什么类型的授权方案。我已经做了几个应用程序,许可证密钥激活了功能集,因此您只有一个可执行文件。

+0

我们正在使用Uniloc - 但我们目前在可执行文件上使用了一个包装器,因为我们没有时间在代码中实现许可证检查功能,直到下一个版本。最终这将是一个非问题,因为我们将使用Uniloc系统的功能管理。 – Jasmine 2008-11-12 04:43:27

2

是的,那当然是可能的。 Visual Studio解决方案默认具有两种配置。 (发布和调试)。您可以创建其他的像“EnterpriseDebug”和“EnterpriseRelease”只要到配置管理器下(建设|配置管理器),然后选择<新建... >

配置管理器将默认创建一个名为后的文件夹配置并将编译后的二进制文件放入其中。您必须手动设置条件编译符号并使用(#if)语句添加/删除您的功能。

0

我会考虑使其完全动态的,以便在编译时或构建安装程序/部署程序包时不必做任何特殊的事情。以下是我会做一个商业WinForms应用程序...什么都没有火箭科学有关,但它的工作原理:

  1. 有发牌制度/机构/标志,告诉你当前用户是否被许可专业版或企业版。你甚至可以使用“试用”或“评估”选项。

  2. 设置一个CurrentUser对象(或类似的),告诉您当前用户的许可证级别。这应该可以在整个应用程序中访问。

  3. 使用plugin model以便功能/组件/功能是应用程序内的插件。随着应用程序的主外壳打开,您可以将插件加载到应用程序中 - 使它们以您想要的方式显示在用户界面中。

  4. 研究创建custom attributes来装饰代表插件的类。该属性应指出该插件/功能所需的最低许可证。当插件加载器遇到新的插件时,请检查该插件的属性以查看需要什么级别的许可证。如果当前用户符合(或超过)该许可证,则加载该许可证。如果没有,你不会。

  5. 如果您不能将您的功能/选项/工具划分为可轻松模块化为插件的东西,那么您仍然可以使用CurrentUser许可证级别来检查事物。例如,假设有一个在专业版的100“小工具”的一些限制(但不是企业):

例如:

enum LicenseLevel { 
    Eval = 0, 
    Pro = 1, 
    Enterprise = 2 
} 

// later...  

for(i=0; i < widgets.Count; i++) { 
    if (i == 100 && CurrentUser.LicenseLevel < LicenseLevel.Enterprise) 
    break; 
    // do stuff 
} 

希望与你的上述拟合的某种组合”重新寻找。

+0

这几乎是我目前有,当我有我的适当的授权计划,这是我的这样做,但我目前的许可方案需要两个不同的可执行文件。 – Jasmine 2008-11-12 06:14:23

0

me.yahoo.com男人是现货。

您可以使用编译时定义创建多个配置。

您还可以更改构建输出目录。默认情况下,你可能有bin/debug和bin/release。没有任何东西阻止你拥有bin/pro和bin/enterprise输出文件夹(例如)。

相关问题