日期:2013-06-03  浏览次数:20408 次

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace MSDNOUT
{
 /// <summary>
 /// 反编译微软MSDN2003文档并保存到数据库的程序主窗体
 /// </summary>
 public class dlgMSDNOut : System.Windows.Forms.Form
 {
  /******************************************************************************************

  声明:本程序只是研究性的程序,没有损害微软对MSDN的版权的意图,并承认
  微软对 MSDN , Microsoft Help 2.0 SDK , HXS文件格式,MSDE 等版权所有权

  本程序能反编译微软MSDN2003的帮助文档,并将反编译结果保存到一个SQLSERVER数据库中
  
  本文件为一个独立的C#代码文件,不需要依赖任何其他文件,使用VS.NET建立一个
  C#的默认名称空间为MSDNOUT的Windows应用程序后将该文件内容覆盖掉系统自动生成
  的Form1.cs文件内容即可编译通过并执行,本程序在微软.NET框架1.1简体中文版的
  Windows2000Server环境下测试通过, MDAC版本2.7,数据库服务器为MSDE,版本8.00.760(SP3)
  
  本程序假定你将MSDN2003安装在 C:\Program Files\MSDN\2003FEB\2052
  还假定安装了 Microsoft Help 2.0 SDK , 并假定安装在目录
  "C:\Program Files\Microsoft Help 2.0 SDK" , 该SDK安装文件可在微软网站下载

  本程序长时间频繁的读写临时文件,因此可以使用一个虚拟硬盘工具在
  物理内存中虚拟一个磁盘,这样可以大大加快程序的运行速度
  可在 http://down1.tech.sina.com.cn/cgi-bin/download/download.cgi?s_id=3761&num=1 
  下载一个虚拟硬盘工具
  
  程序使用的数据库为MSSQLSERVER,在此使用了MSDE,由于MSDE的单个数据库
  大小限制在2GB内,而MSDN文件总共超过了2GB,因此程序运行时还根据需要
  切换数据库,本程序使用的数据库文件保存在 f:\db 下面
  使用前请执行以下SQL语句来初始化数据库

  CREATE DATABASE MSDN1 ON (NAME = ’MSDN1’, FILENAME = ’f:\db\MSDN1.mdf’ )";

  CREATE TABLE [MSDNFileList] (
   [MFileID] [int] NOT NULL ,
   [MFileName] [varchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
   [MDBName] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
   [MFileLength] [int] NULL ,
   CONSTRAINT [PK_MSDNFileList] PRIMARY KEY  CLUSTERED 
   (
    [MFileName]
   )  ON [PRIMARY] 
  ) ON [PRIMARY]
  GO

  CREATE TABLE [MSDNFile] (
   [MFileID] [int] NOT NULL ,
   [MFileContent] [image] NULL ,
   CONSTRAINT [PK_MSDNFile] PRIMARY KEY  CLUSTERED 
   (
    [MFileID]
   )  ON [PRIMARY] 
  ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

   *****************************************************************************************/
   
  /// <summary>
  /// 取消操作标记
  /// </summary>
  private bool bolCancel  = false ;
  /// <summary>
  /// 暂停操作标记
  /// </summary>
  private bool bolPause = false ;
  /// <summary>
  /// 主数据库连接字符串
  /// </summary>
  private System.Data.SqlClient.SqlConnection MainConn = null;
  /// <summary>
  //