1

こんにちは、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);
4

3 に答える 3

1

読み取り専用機能のみを使用してファイルを 2 回目に開く必要がある場合 (たとえば、テンプレートとして使用する場合)、そのファイルのコピーを作成して毎回複製を開くべきではない理由がわかりません。君はそれが要る。

たぶん、追加情報を追加できるので、解決策を見つけるためのより良い提案があるかもしれません!

于 2012-12-27T19:51:12.750 に答える
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
        }
    }
于 2012-12-27T09:38:46.233 に答える