一个需要授权的Excel add-in

在网上有朋友问我怎么阻止非授权用户使用add-in。在这里我给出一个例子(当然,在实际工作中使用的逻辑要远比这个复杂。这里只是说明一个大体的过程罢了)

首先我在app.config中设定了一个MD5值(就是我的授权码了,本例中是“This is a test!”)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MySecurityStrng" type="System.Configuration.SingleTagSectionHandler"/>
  </configSections>
  <MySecurityStrng key="702EDCA0B2181C15D457EACAC39DE39B" />
  <!-- Key: This is a test! -->
</configuration>

然后再ThisAddIn中作如下修改:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using System.Configuration;
using System.Windows.Forms;
using System.Collections;
using System.Security.Cryptography;
using Microsoft.Win32;

namespace ExcelAddIn7
{
    public partial class ThisAddIn
    {

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Configuration cnf = ConfigurationManager.OpenExeConfiguration(
                AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
                .Replace(".config", ""));
            Hashtable ht = (Hashtable)ConfigurationManager
                .GetSection("MySecurityStrng");
            Form1 frm = new Form1();
            frm.ShowDialog();
            string value = frm.Value;
            using (MD5 hash = MD5.Create())
            {
                byte[] buffer = hash.ComputeHash(Encoding.UTF8.GetBytes(value));
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < buffer.Length; i++)
                {
                    sb.Append(buffer[i].ToString("X2"));
                }
                if (!ht["key"].ToString().Equals(sb.ToString()))
                {
                    RegistryKey rk = Registry.CurrentUser
                        .OpenSubKey("Software\\Microsoft\\Office\\Excel\\"
                        +"Addins\\ExcelAddIn7",true);
                    if (rk != null)
                    {
                        rk.SetValue("LoadBehavior", 2);
                        rk.Close();
                    }
                    MessageBox.Show("You can't use this Add-in");
                    Application.Quit();
                }
            }
           
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}



你可能感兴趣的:(Excel)