2017-07-29 9 views
1

以下は私のコードです。しかし、パスワードは削除されません。 Wordを手動で開くと、パスワードダイアログがまだポップアップしています。CでInteropを使用して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); 
      } 
     } 
    } 
+0

おそらく_save as_と同じことを試してください。これは、対話的にWordを使用するときにユーザーが通常行うことです。 – MickyD

答えて

2

それはPasswordプロパティを設定すると、実際に汚いとして文書をマークしないようなので、それは保存されません見えます。私はドキュメントを読み書きして、とにかく保存するように強制するオプションがあるかどうかを確認しました。そのようなオプションがWord Automation Modelの初期のバージョンに存在していたことをぼんやりと思い出しましたが、私は見つけられませんでした。

私はこの小さなハックを思いついて、ドキュメントに小さな変更を加えるだけでなく、その変更を同時に削除しました。

// 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をやっているが、その後あなたは、一時ファイルへの書き込みを閉じて、元のファイルはもうロックされていないので、適切に解放し、元と移動を削除する必要があります一時ファイルを元に戻します。それはうまくいっているように、より多くの失敗事例があるように感じます。

+0

ハックのThx! –

関連する問題