C# 控制台应用程序Word权限问题

C# 控制台应用程序Word权限问题,c#,ms-office,C#,Ms Office,我不想就使用Microsoft Office执行此任务的优点展开辩论。我曾无休止地争辩说,这不是实现这一目标的方法,而是在许多场合被权力所压倒。我也理解微软不建议使用这种方法,也不支持这种方法。但我在这里 问题:我创建了一个控制台应用程序,通过使用密码加密文件来处理文件,以便通过电子邮件发送。我没有问题处理图像和PDF的,都使用iTextSharp,但有一个奇怪的问题处理办公室文件。当我逐步通过studio时,无论我使用哪个active directory帐户登录,它们都会毫无问题地进行处理。但

我不想就使用Microsoft Office执行此任务的优点展开辩论。我曾无休止地争辩说,这不是实现这一目标的方法,而是在许多场合被权力所压倒。我也理解微软不建议使用这种方法,也不支持这种方法。但我在这里


问题:我创建了一个控制台应用程序,通过使用密码加密文件来处理文件,以便通过电子邮件发送。我没有问题处理图像和PDF的,都使用iTextSharp,但有一个奇怪的问题处理办公室文件。当我逐步通过studio时,无论我使用哪个active directory帐户登录,它们都会毫无问题地进行处理。但是,部署时,office文档将不会处理,除非它在我的AD帐户下运行。我确切地知道错误是在哪里产生的。下面是代码

private void PasswordProtectWord(Datapassedin pa)
{
   int num = 0;
   try
   {
      Microsoft.Office.Interop.Word._Application objWord = null;
      _Document objDoc = null;
      objWord = (Microsoft.Office.Interop.Word.Application)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));

      objWord.Visible = false;
      objWord.DisplayAlerts = WdAlertLevel.wdAlertsNone;
      objWord.DisplayAutoCompleteTips = false;
      objWord.DisplayDocumentInformationPanel = false;
      objWord.DisplayRecentFiles = false;
      objWord.ScreenUpdating = false;
      object objValue = Missing.Value;
      object objMissing = Type.Missing;
      object docName = pa.DocName;
      object password = pa.Password;
      object passwordProtectedDocName = pa.Password_Protected_DocName;
      object objTrue = true;
      object objFalse = false;
      object objReadOnly = configvalue.ObjReadOnly;
      // open statement below does not open
      objDoc = objWord.Documents.Open(ref docName, ref objValue, ref objReadOnly, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objFalse, ref objValue, ref objValue, ref objValue, ref objValue);
      // null object error is thrown here when we attempt to activate.  I discovered this by placing flags in the code line
      objDoc.Activate();
      objDoc.SaveAs2(ref passwordProtectedDocName, ref objValue, ref objValue, ref password, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue, ref objValue);
      objDoc.Close(objTrue, Type.Missing, Type.Missing);
      Marshal.ReleaseComObject(objDoc);
      objWord.Quit(objFalse, Type.Missing, Type.Missing);
      Marshal.ReleaseComObject(objWord);
  }
  catch (Exception ex)
  {
      UpdateErrorLogAndSendEmail(string.Format("{0} And {1} - {2} - {3}", ex.Message, ex.InnerException.Message,  num.ToString(), pa.Password_Protected_DocName), ex.Source, "", configvalue.Bcc);
  }
}
好的,这里是我为解决这个问题所采取的一些步骤,尽管是极端的步骤

我们试图使用服务ID而不是我自己的帐户重建整个项目。然后使用服务ID登录服务器,部署代码并创建控制台作业

这不仅不起作用,而且当我的ID被用作广告授权时,它还允许控制台应用程序运行,从而重复了该行为

尝试将我的广告帐户的所有权限复制到服务ID。结果与上面相同

要审议的项目:

  • 计划任务处理所有图像和PDF文件,无论使用何种AD帐户
  • 当没有在我的帐户下运行时,没有AD帐户可以在office文档上工作。我只提到了上面的服务帐户,但我们也尝试使用系统管理帐户来运行计划的任务
  • 所有试图运行计划任务的帐户都会登录到部署服务器并打开word/excel文档,以确保服务器上有临时空间
  • 所有帐户的Office设置都与我的设置进行了比较和匹配

  • 这个问题的一个问题是,我甚至不知道在寻找答案时要寻找什么

    “但办公室文件不会处理”:以何种方式处理?错误还是什么?需要在这里描述症状。在调试器中加载时,进程转储在该点显示什么?这是否相关?Richard,如果你读了这篇文章,代码行会有注释告诉你它到底在哪里失败以及产生的错误。它似乎无法打开文档,并引发“object null value”异常。有问题的文件肯定在那里,服务广告帐户可以访问该目录,因为它能够处理来自该网络共享的其他文件类型。Bolu-谢谢,我现在正在查看该链接,并会让您知道。我可以告诉你,我在“Dconfig”中没有Microsoft Word 97-2003文档,但我可能发现了一些需要更正的其他设置。很高兴你已经解决了这个问题,你可以发布答案以及你自己问题的所有步骤。