我正在使用c#.net4 winforms应用程序中的interop创建一个单词(14)实例来处理文档。如果某个word文档在我的应用程序之外被打开,则会使用相同的单词实例来扰乱我的应用程序。
简单问题:有没有办法为我的应用程序设置我的单词实例?
提前致谢。
顺便说一下:找到一些带有exclusive / word / office / isolated / block / instance的东西,但无论如何都没有答案。
答案 0 :(得分:7)
有一种解决方案,但它并不漂亮。 主要问题是Word在ROT(运行对象表)中注册自己,然后其他应用程序可以轻松访问在ROT中注册的Word实例(例如VB GetObject函数所执行的操作)。
所以,在你的应用中,你基本上必须做两件事
即使你终止了第一个实例,它也不会“追溯”地在ROT中注册自己,而其他应用程序通常不会对它的引用进行对象使用,它们会自动创建一个新的实例,没有其他实例在ROT中注册,然后将被注册。
也就是说,其他应用程序仍然可能来获取Word的实例,所以这种技术不是防弹的。怎么样?因为Word ALSO在ROT中注册每个加载的DOCUMENT。但这是一个很少使用的功能。
答案 1 :(得分:5)
不,你无法为自己锁定一个Word实例。
但是,根据您的评论,可以轻松解决此问题 - 请勿使用ActiveDocument
。您可以使用ActiveDocument
来调用特定的文档,然后使用该变量(无论是打开现有文档还是创建新文档)。
例如:
Sub NewDoc()
Dim d As Document
Set d = Documents.Add(Visible:=False)
End Sub
Sub ExistingDoc()
Dim d As Document
Set d = Documents.Open(FileName:="C:\myexisting.doc")
End Sub
在上述两种情况下,您只需使用d
代替以前使用ActiveDocument
的位置。