1

我是 Active Directory 权限管理服务 (AD RMS) 的新手,我正在开发一个应用程序来使用 AD RMS 加密一些文档。我正在使用互操作示例,但出现错误 - 系统找不到指定的文件。HRESULT: 0x80070002 - 当我尝试运行下面的代码时:

当我尝试运行此语句时出现错误:

集合 ipcTemplates = IPC.GetTemplates();

internal static class IPC
{
     static IPC()
     {
          SafeNativeMethods.IpcInitialize();
     }

     public static Collection<TemplateInfo> GetTemplates()
     {
          Collection<TemplateInfo> templates = null;

          try
          {
               templates = SafeNativeMethods.IpcGetTemplateList(null, true, true,
                                false, false, null, null);
          }
          catch (Exception /*ex*/)
          {
              /* TODO: Add logging */
              throw; 
          }

          return templates;
     }
}

堆栈跟踪:

该系统找不到指定的文件。HRESULT:Microsoft.InformationProtectionAndControl.SafeNativeMethods.ThrowOnErrorCode(Int32 hrError) 中的 HRESULT:0x80070002 在 Microsoft.InformationProtectionAndControl.SafeNativeMethods.IpcGetTemplateList(ConnectionInfo connectionInfo, Boolean forceDownload, Boolean suppressUI, Boolean offline, Boolean hasUserConsent, Form parentForm, CultureInfocultureInfo) in c:\Microsoft.InformationProtectionAndControl\SafeNativeMethods.cs:line 137 at IPC.GetTemplates() in c:\IPC.cs

此外,我还设置了一个构建后事件,以确保每次编译代码时都会创建清单文件。该应用程序是托管在 Windows 服务中的 WCF 服务。我有一个非常简单的控制台应用程序。

解决此错误的任何帮助以及使用托管代码的任何 AD RMS 示例将不胜感激:)

4

1 回答 1

2

对于可能遇到此问题的其他人,我可以通过添加 SafeNativeMethods.IpcSetAPIMode(APIMode.Server); 来解决我的问题。像这样对我的静态构造函数:

static IPC()
    {
        SafeNativeMethods.IpcInitialize();
        SafeNativeMethods.IpcSetAPIMode(APIMode.Server);
    }
于 2013-08-01T19:47:51.403 回答