'Word不能这样做,因为一个对话框是打开的'使用Interop.Word时出现错误

本文关键字:Word 使用 错误 Interop 这样做 不能 因为 一个 对话框 | 更新日期: 2023-09-27 18:15:46

我有一个使用模板创建word文档的函数。创建后,它将所有创建的文档发送到打印机。如果没有其他打开的word文档,它将正确打印它们。但是如果有另一个打开的word文档,我看到一个警告框,说' word不能这样做,因为一个对话框是打开的'。关闭该框后,当我检查打印队列时,我看到列表是不完整的。有些文件不见了。有没有一种方法可以发送多个word文档到打印队列而不关闭其他打开的word文档?

我的代码如下:

Word.Application wordApp = new Word.ApplicationClass();
Word.Document aDoc = null;
//...
aDoc = wordApp.Documents.Open();
aDoc.Activate();
aDoc.SaveAs(ref fileName, ref missing,..)
aDoc.Close();
paths.Add(fileName);
object saveChanges=false;
object obj = Missing.Value;
wordApp.Quit(ref saveChanges, ref obj, ref obj);
foreach(string var in paths)
{
   ProcessStartInfo info = new ProcessStartInfo(var);
   info.Verb = "Print";
   info.RedirectStandardError = false;
   info.Arguments = printername;
   info.CreateNoWindow = true;
   info.ErrorDialog = false;
   info.UseShellExecute = true;
   info.WindowStyle = ProcessWindowStyle.Hidden;
   Process.Start(info);
}

'Word不能这样做,因为一个对话框是打开的'使用Interop.Word时出现错误

实际上这听起来更像是一个Word配置问题,而不是编码问题。

无论如何,我挖掘了一下,发现了这个配置:

在您的Microsoft Word>选项>信任中心>信任中心设置>受保护的视图>取消选中所有

试一试,把结果贴出来。

这个建议是这个问题的答案,在technet。微软论坛。

谢谢你的建议。我解决了我的问题。

我意识到,在发送到打印机的过程中,进程相互干扰。新进程在前一个进程结束之前开始。所以我需要等待之前的进程结束。WaitForExit()我这样修改了我的代码:

foreach(string var in paths)
{
ProcessStartInfo info = new ProcessStartInfo(var);
info.Verb = "Print";
info.RedirectStandardError = false;
info.Arguments = printername;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.UseShellExecute = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process cmd = Process.Start(info);
cmd.WaitForExit();
}

效果很好