我参加了盛大组织的“Bambook程序达人赛”,是通过博客园报名的。目前提交了两件参赛作品。

在参赛作品中需要实现“注册到云梯”的功能,如下图所示:

这是一个通用的功能,可以封装为一个类,以便各个参赛的 C# 程序调用。

根据盛大官方的 SDK 文档,要注册应用程序到云梯,有两种方法:

  1. 使用 RegApp.exe。
  2. 编辑云梯安装目录下的 bbapps.xml 文件。

我决定采用第二种方法,即编辑云梯安装目录下的 bbapps.xml 文件。

之所以不采用第一种方法,其中一个原因是第一种方法需要随程序一起发布 RegApp.exe。

好了,下面就是核心的 BambookAppsXml.cs 源程序文件:

01:  using System;
02:  using System.Xml;
03:  using System.IO;
04:  using Microsoft.Win32;
05:
06:  namespace Skyiv.Common
07:  {
08:    /// <summary>
09:    /// 盛大云梯软件的应用程序扩展的配置文件
10:    /// </summary>
11:    public sealed class BambookAppsXml
12:    {
13:      static readonly string XmlFileName = "bbapps.xml";
14:      static readonly string ElementApp = "app";
15:      static readonly string ElementId = "id";
16:      static readonly string ElementExec = "exec";
17:
18:      XmlDocument doc;
19:
20:      /// <summary>
21:      /// 注册应用程序到云梯
22:      /// </summary>
23:      /// <param name="guid">应用程序标识</param>
24:      /// <param name="executeFileFullName">应用程序全路径名</param>
25:      public void InsertOrUpdate(Guid guid, string executeFileFullName)
26:      {
27:        if (guid == Guid.Empty) throw new Exception("程序标识不能为空");
28:        var path = GetCloudLibraryInstallPath();
29:        if (path == null) throw new Exception("云梯软件尚未安装,请先下载并安装云梯。");
30:        var fileName = Path.Combine(path, XmlFileName);
31:        doc = new XmlDocument();
32:        doc.Load(fileName);
33:        var id = guid.ToString("N");
34:        var elem = FindElementId(id);
35:        if (elem == null) doc.DocumentElement.AppendChild(elem = CreateElementId(id));
36:        InsertOrUpdateElementExec(elem, executeFileFullName);
37:        doc.Save(fileName);
38:      }
39:
40:      XmlElement FindElementId(string id)
41:      {
42:        foreach (var node in doc.DocumentElement.ChildNodes)
43:        {
44:          var elem = node as XmlElement;
45:          if (elem == null) continue;
46:          foreach (var node2 in elem.ChildNodes)
47:          {
48:            var elem2 = node2 as XmlElement;
49:            if (elem2 == null) continue;
50:            if (elem2.Name != ElementId) continue;
51:            if (elem2.InnerText == id) return elem;
52:          }
53:        }
54:        return null;
55:      }
56:
57:      XmlElement CreateElementId(string id)
58:      {
59:        var elem = doc.CreateElement(ElementApp);
60:        var elemId = doc.CreateElement(ElementId);
61:        elemId.InnerText = id;
62:        elem.AppendChild(elemId);
63:        return elem;
64:      }
65:
66:      void InsertOrUpdateElementExec(XmlElement elem, string value)
67:      {
68:        foreach (var node2 in elem.ChildNodes)
69:        {
70:          var elem2 = node2 as XmlElement;
71:          if (elem2 == null) continue;
72:          if (elem2.Name != ElementExec) continue;
73:          elem2.InnerText = value;
74:          return;
75:        }
76:        var elemExec = doc.CreateElement(ElementExec);
77:        elemExec.InnerText = value;
78:        elem.AppendChild(elemExec);
79:      }
80:
81:      /// <summary>
82:      /// 获取云梯软件的安装目录
83:      /// </summary>
84:      /// <returns>云梯软件的安装目录</returns>
85:      string GetCloudLibraryInstallPath()
86:      {
87:        return Path.GetDirectoryName(Registry.GetValue(
88:          @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Bambook",
89:          "AutoRunExec", null) as string);
90:      }
91:    }
92:  }

这个 BambookAppsXml 类的主要功能是通过编辑盛大云梯软件安装目录下的 bbapps.xml 文件来将应用程序注册到云梯。

上述程序中第 85 到第 95 行的 GetCloudLibraryInstallPath 方法通过读取注册表的以下键值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Bambook\AutoRunExec

来获得云梯软件的安装目录。

云梯软件安装目录下的 bbapps.xml 文件格式如下所示:

01:  <bbapps>
02:    <app>
03:      <id>1aba95ad66ec70263a79fa260394e170</id>
04:      <exec>E:\Bambook\Air\TVGuide\TVGuide.exe</exec>
05:    </app>
06:    <app>
07:      <id>88a915cc3658c7130910da4e312436f3</id>
08:      <exec>E:\work\PowerWord2Snb\PowerWord2Snb.exe</exec>
09:    </app>
10:  </bbapps>

然后上述程序就通过 System.Xml 命名空间的下的 XmlDocument 类以及相关的类来编辑这个 XML 文件,从而达到将应用程序注册到云梯的目的。

在 AboutDiaglog 类的“注册到云梯”按钮的事件处理程序中调用 BambookAppsXml 类的 InsertOrUpdate 方法来注册应用程序到云梯,如下所示:

01:  private void btnRegisterApp_Click(object sender, EventArgs e)
02:  {
03:    try
04:    {
05:      new BambookAppsXml().InsertOrUpdate(assembly.Guid, assembly.ExecuteFileFullName);
06:      MessageBox.Show("完成", "注册到云梯", MessageBoxButtons.OK, MessageBoxIcon.Information);
07:    }
08:    catch (Exception ex)
09:    {
10:      MessageBox.Show(ex.Message, "注册到云梯", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
11:    }
12:  }

这个 AboutDialog 类的其余部分的源程序代码请参见 通用的“关于本软件”对话框 一文。

最后,就是“锦书背单词”这个应用程序的 AssemblyInfo.cs 源程序文件了:

01:  using System.Reflection;
02:  using System.Runtime.InteropServices;
03:
04:  [assembly: AssemblyTitle("锦书背单词")]
05:  [assembly: AssemblyDescription("将金山词霸导出的生词本,制作成snb格式的电子书。")]
06:  [assembly: AssemblyCompany("Skyiv Studio")]
07:  [assembly: AssemblyProduct("PowerWord2Snb")]
08:  [assembly: AssemblyCopyright("Copyright ©  2010")]
09:
10:  // 注意,这不是 Visual Studio 2010 自动生成的 Guid。
11:  // 这是从盛大官网获得的 Guid,用于注册到云梯。
12:  [assembly: Guid("88a915cc-3658-c713-0910-da4e312436f3")]
13:
14:  [assembly: AssemblyVersion("1.4")]

这里要注意的是 GuidAttribute 不能使用 Visual Studio 2010 自动生成的 Guid,要从盛大官网获取。

盛大锦书注册到云梯的 C# 程序相关推荐

  1. 盛大锦书bambook一代SD928更换电池和使用经验

    不使用原装的电池保护板,给锦书bambook更换电池. 盛大推出的电纸书:盛大锦书bambook虽然已经停产,现在仍然有一定用户存量.本博主的SD928是bambook一代产品,2011年购买.放在那 ...

  2. 盛大bambook锦书十分钟应用评述

    作为电子产品爱好者以及起点中文网高级VIP会员,在盛大正式发布bambook内测邀请码时,第一时间做了申请,可能是因为起点的高V身份起了作用,很快(一个小时内)就发给我了内测邀请码,网上订购之后,当天 ...

  3. 购Bambook锦书,免费阅读6期《程序员》杂志,现只要999元

    <程序员>十年特别纪念联手盛大特惠活动,凡在2010年12月01日-2011年02月28日活动期间,通过CSDN在线订购.<程序员>杂志社读者服务部订购市价999元的Bambo ...

  4. phpcmsV9视频模块开发——盛大游戏通行证注册与密码找回

    phpcmsV9视频模块开发--盛大游戏通行证注册与密码找回 phpcmsV9视频模块,使用的是盛大旗下的K6[酷6]视频开发的,所以需要注册绑定b盛大通行证. 当然也可以自定义开发,使用腾讯.优酷等 ...

  5. 为了找到自己的路——leo锦书62

    <Leo锦书(文章1编辑)>百度已经降落阅读,今后将继续更新.免费下载:http://t.cn/RvawZEx 柯克•卡梅隆是谁呢?在中国听过这名字的人预计不多.但看下封面我们马下就会说: ...

  6. 心有千千结,却是锦书难寄

    春日暖阳,明晃晃的耀眼入心,感受浮躁如光线中跳跃的微尘无处不在.弃了体力运动很久,却难挡思想运动如潮,几番来去,自顾自地想在这午后寂寥善感之时澎湃. 有个声音鼓噪如雀叽喳:写一封情书吧,折落花如雪的梅 ...

  7. 未在本地计算机上注册oraoledb.oracle.1提供程序,未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序--问题的处理...

    最近Up主接手了C#连接Oracle的项目,遇到了各种问题,最严重的莫过于用连接字符串连接不上Oracle了. 抛出如下问题System.InvalidOperationException: 未在本地 ...

  8. 怎样把本软件是否注册的标志加在程序里?(注:不想加在数据库里)

    怎样把本软件是否注册的标志加在程序里?(注:不想加在数据库里) Delphi / Windows SDK/API http://www.delphi2007.net/DelphiDB/html/del ...

  9. 如何利用注册表修改开机启动程序并提高电脑开机速度!

    利用注册表修改开机启动程序: 修改以下三个地方就可以了,最主要的是Run这个地方.[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersi ...

最新文章

  1. POJ 3180 Tarjan
  2. ubuntu16.04 在cuda9.0环境下编译安装opencv2.4.13.7
  3. 砖家:游戏账号交易属违法行为 相关部门应严厉打击
  4. elasticsearch 自定义routing
  5. leetcode 636. Exclusive Time of Functions | 636. 函数的独占时间(Stack)
  6. 开发个好的RTMP播放器到底难在哪里?RTMP播放器对标和考察指标
  7. 如何梳理产品功能,才能既见森林又见树木?
  8. InputStreamReader笔记
  9. 台式计算机颜色如何矫正,台式机怎么颜色校正操作教程
  10. 证明同步函数使用的this锁
  11. 2022年上半年网络工程师上午真题及答案
  12. 做SEO优化第七步:如何选择网站程序模版?
  13. iOS应用内购常见问题及注意事项
  14. java定义一个日期类 包括年 月 日_【说明】 设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期..._考试资料网...
  15. 没有什么能够毁灭一个人的灵魂
  16. 四旋翼飞行器13——欧拉中的俯仰、横滚、偏航角
  17. director入门
  18. C语言程序设计:单词本整体框架实现
  19. python中装饰器修复技术_12步轻松搞定Python装饰器
  20. 智慧旅游建设的目的和特点是什么?

热门文章

  1. iOS马甲包系统性全流程把控
  2. windows自带便笺使用
  3. 未来老婆查询生成器威信小程序源码
  4. python绘制对数坐标图描点_Python3.0科学计算学习之绘图(一)
  5. 怎样把本地视频放到html,iPhone – 如何将本地视频文件嵌入到Html中以在UIWebView中播放?...
  6. 全球最经典音乐推荐,装满mp3
  7. php 中insert into,数据库insert_PHP MySQL Insert Into用法
  8. 教育直播的受众人群分析
  9. 爱丁堡大学—计算机应用数学,爱丁堡大学计算机应用数学理学硕士
  10. 开源工业自动化SCADA数据采集系统(基于win2016ser)