如何在c#中使用Interop删除Word密码

时间:2017-07-29 14:33:57

标签: c# ms-word

以下是我的代码。但密码不会被删除。当我手动打开Word时,密码对话框仍然会弹出。

我也尝试过Unprotect方法,但这也不起作用。

    private static void WordUnProtect(string fileName, string password)
    {
        var app = new Word.Application();
        Word.Document doc = null;

        try
        {
            doc = app.Documents.Open(fileName, PasswordDocument: password);

            // this doesn't work also
            //doc.Unprotect();

            doc.Password = string.Empty;

            doc.Save();
        }
        finally
        {
            if (doc != null)
            {
                doc.Close(false);
                Marshal.ReleaseComObject(doc);
            }

            if (app != null)
            {
                app.Quit();
                Marshal.ReleaseComObject(app);
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

看起来设置Password属性实际上并未将文档标记为 dirty ,因此不会保存。我已经浏览了文档,看看是否有一个选项可以强制它保存/使其变脏。虽然我模糊地回忆起早期版本的Word自动化模型中存在这样的选项,但我无法找到。

所以我想出了这个小小的黑客来对文档进行一些小改动,同时也删除了这个改变。

// doc IsDirty
doc.Range(0, 0).InsertBefore(" ");
// no more password
doc.Password = null;
// let's remove what was Inserted
doc.Range(0, 1).Text ="";

另一个选项当然是按照MickyD的建议做SaveAs,但是你需要写一个临时文件,关闭并正确释放,这样原来的文件就不会被锁定,删除原文并将临时文件移动到原始文件。这将有效,感觉它有更多的失败案例。

答案 1 :(得分:0)

操纵/切换doc.saved属性 doc.close之前为真