Office Interop通过任务计划程序运行。
Office Interop通过任务计划程序运行。
尝试设置一个C#控制台程序,使用Word作为中间件将PDF转换为HTML。当登陆后从命令行运行时可以正常工作,但是从计划任务中运行时无法工作。\n我知道微软官方并不支持这样的操作- https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office ,但我仍然希望尝试这种方法。\n我已经看到了一些关于解决方法的帖子,但是无法使其工作。\n简而言之,程序在打开文档的时候停止响应。\n请问有人能指导如何绕过这个由微软实施的限制吗?\n
namespace InterOpTest { class Program { static void Main(string[] args) { Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application(); String sFolder = "C:\\temp"; String sInputFile =sFolder+"\\input.pdf"; String sOutputFile = sFolder+"\\test\\output.html"; String sLogFile = sFolder + "\\Interoptest.log"; System.IO.DirectoryInfo d = new DirectoryInfo(sFolder); // StreamWriter sw= new StreamWriter(sLogFile); StreamWriter sw = File.AppendText(sLogFile); try { sw.WriteLine(""); sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",删除任何现有版本的 " + sOutputFile); File.Delete(sOutputFile); sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",打开 "+sInputFile); oWord.Documents.Open(sInputFile); sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",保存为 " + sOutputFile); oWord.ActiveDocument.SaveAs2(sOutputFile, FileFormat: 10); oWord.Quit(); oWord = null; sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",完成"); } catch (Exception e) { sw.WriteLine(DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss") + ",错误:"+ e.Message); } finally { sw.Close(); Console.WriteLine("完成"); } } } }
根据以上内容,我们可以整理出以下文章:
Office Interop run via Task Scheduler问题的原因及解决方法
根据我的理解,目前没有任何解决方法可供选择。
Office Interop(以及其他依赖GUI的库)只能在交互式桌面会话中正常工作。
正如以下两个链接所述:
1. https://serverfault.com/questions/458848/can-i-schedule-a-windows-task-to-run-in-an-interactive-desktop-session
2. https://stackoverflow.com/questions/6939548
这两个链接都指出,没有任何间接的选项可以实现这一点。
因此,您只能选择以下两个方法之一:
1. 以当前登录的用户身份运行/安排应用程序。
2. 或者采用OpenXML/其他替代方法,如Christopher的答案所提议的。
以上就是关于Office Interop run via Task Scheduler问题的原因及解决方法的总结。
问题的原因:使用Office Interop通过任务计划程序运行时,可能会遇到缺乏交互会话的问题。
解决方法:建议始终使用OpenXML SDK来处理现代格式的文档,如docx。对于旧格式的文档,主要的方法是使用Office COM Interop。但是,这种方法存在COM interop的一般限制,并且需要交互式会话和已安装的Office软件才能正常工作。另外,还可以尝试使用其他第三方库或类来处理特定格式、特定操作和特定界面的文档,但是这些方法可能不太可靠。
对于转换pdf到word的需求,OpenXML SDK可能无法实现,这可能是Office/Interop的特有功能。可以尝试寻找其他解决方案或确保任务计划程序具有交互式会话。
总之,建议放弃对旧格式文档的支持,并将其转换为新格式文档。旧格式的文档已经过时,而OpenXML SDK可以轻松处理现代格式的文档。