大家都在使用互操作来打开MS-Word中的几个文件。它运行正常。问题是当我尝试打开已经打开的文件不起作用时。任务中出现一个正在使用的文件对话框经理只能通过在任务管理器中点击它来访问它。我怎么能让它可见?或者你能建议另一种方法吗?
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
WordApp.DisplayAlerts = WdAlertLevel.wdAlertsAll;
Microsoft.Office.Interop.Word.Document WordDoc = new Microsoft.Office.Interop.Word.Document();
WordDoc = WordApp.Documents.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing);
WordApp.Visible = true;
System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
答案 0 :(得分:1)
如果您需要仅使用只读功能打开文件第二次(例如,如果您将其用作模板),那么我没有看到原因您不应该只复制它并打开每次需要时重复。
也许您可以添加其他信息,因此也许有人有更好的建议来寻找解决方案!
答案 1 :(得分:0)
您可以尝试将文件加载到另一个AppDomain
中,您可以在不需要后卸载该文件
AppDomainSetup ads = new AppDomainSetup();
ads.PrivateBinPath = Path.GetDirectoryName("C:\\some.doc");
AppDomain ad2 = AppDomain.CreateDomain("AD2", null, ads);
ProxyDomain proxy = (ProxyDomain)ad2.CreateInstanceAndUnwrap(typeof(ProxyDomain).Assembly.FullName, typeof(ProxyDomain).FullName);
bool ok = proxy.DoMsWork("C:\\some.doc");
AppDomain.Unload(ad2);
public class ProxyDomain : MarshalByRefObject
{
public bool DoMsWork(string assemblyPath)
{
//Load your file and do work here
}
}
答案 2 :(得分:0)
确保在卸载互操作时使用它:
WordObject.Quit
以某种方式释放互操作对象并不总是有效。
的其他信息您可以使用
使互操作应用程序可见WordObject.Visible = true
您还应该记住,您不应该在服务器端进程上使用office互操作对象进行文档处理,生成等,因为这样做并不是真的。 Interop对象是内存和cpu饥饿,真正不稳定并且崩溃很多!