RMS是微软的文档权限保护技术,Office 2003中的IRM也是基于RMS。用户可以对于Word等文档,指定相关的访问人以及他们的权限(如读取、修改、打印),以防止机密信息的泄漏。

默认情况下,用户需要指定文档的权限设置。但是对于某些企业,为了加强文档权限的管理,客户可能希望在Word 2003中自动设置文档权限,或者提示尚未设置权限的警告信息。

Word2003并没有直接支持权限自动设置功能,但是如果客户需要,可以通过开发Word的Add-in,响应文档创建、保存或者关闭等事件,在其中完成权限的设置(Office中提供了Permission对象,用于文档权限相关的操作)。可以使用VB、VS.Net等开发环境开发Add-In。

 

从可用性的角度考虑,由于强制设置的权限可能会给用户带来不便,建议仅在必要的情况下采用这种方法;另外,考虑到日常的管理问题,在企业环境中,Add-in应该支持通过管理的方式对于行为进行控制。

 

为了验证可行性,我写了一个简单的样例Add-in(基于VS2003的Add-In Wizard),它将在用户关闭文档时进行检查,如果没有权限保护,则弹出对话框提示用户。该样例并没有检查文档的状态(比如是否修改过)以便进行更精确的处理,仅仅作为演示的目的。

样例代码大部分由VS.Net Shared Add-in Wizards自动生成,我在其中仅加入了响应DocumentBeforeClose的相关代码,以便进行文件权限设置的检查以及提示消息框的显示:

在OnConnection函数中,加入:

关于Office编程的更多信息可以参考

applicationObject  
  = 
   (Microsoft.Office.Interop.Word.ApplicationClass)application; 
applicationObject.DocumentBeforeClose 
  += 
  new 
   Microsoft.Office.Interop.Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(Word_DocumentBeforeClose); 
在Connect类中加入函数: 
 
  private 
    
  void 
   Word_DocumentBeforeClose(Microsoft.Office.Interop.Word.Document doc,  
  ref 
    
  bool 
   Cancel) 
 
  ... 
  { 
 Microsoft.Office.Core.Permission perm=doc.Permission; 
if (!perm.Enabled) 
...{ 
 System.Windows.Forms.DialogResult dr=System.Windows.Forms.MessageBox.Show("Your document isn't rights protected yet, Would you like to set it?","Permission",System.Windows.Forms.MessageBoxButtons.YesNo); 
if (dr==System.Windows.Forms.DialogResult.Yes) Cancel=true; 
 } 
 } 
   
    在 
 Connect 
 类中定义变量: 
 
private Microsoft.Office.Interop.Word.Application applicationObject;

为了使用该程序需要安装Office 2003 PIA和Word 2003 PIA,可以通过完全安装Office 2003确保及其上安装了上述PIA。关于PIA的更多信息,可以参考Office 2003 Primary Interop Assemblies (PIAs): http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stagsdk/html/stconPIAs.asp

HOW TO:使用 Visual C# .NET 生成 Office COM 外接程序:http://support.microsoft.com/?id=302901

How To Handle Events for Word by Using Visual C# .NET:http://support.microsoft.com/default.aspx?scid=kb;EN-US;302817