2016-05-26 3 views
1

Imagentの文書を、一時的なテストアプリケーション(デバッグ用)内でMS Wordで開いて、後でActiveXコントロールプロジェクトにコピーしようとしています。ポップアップされるエラーは次のとおりです。0x7618851Aで投げWord 2065でImanageから文書を開く

例外w3wp.exeの中(MSVCRT.DLL):0xc0000005で:アクセス>違反場所0x09801000を読みました。

この例外のハンドラがある場合、プログラムは安全に続行されます。

このエラーは、cmd.Execute行を実行しているときに発生し、エラーが表示される理由がわかりません。原因エラーの性質に

using IManage; 
    using IMANEXTLib; 
    using System;   

     namespace WebApplication3 
     { 
      public partial class WebForm2 : System.Web.UI.Page 
      { 
       IManDatabase imanagedatabase; 
       IManDMS myDMS = new ManDMSClass(); 

       protected void Page_Load(object sender, EventArgs e) 
       { 
        openImanageDoc("docNumber", "versionNumber", "server", "database", ReadOnly); 
       } 
       public void imanageLogin(string server, string database) 
       { 
        try 
        { 
         IManSession session = myDMS.Sessions.Add(server); 
         IManWorkArea oWorkArea = session.WorkArea; 
         session.TrustedLogin(); 

         foreach (IManDatabase dbase in session.Databases) 
         { 
          if (dbase.Name == database) 
          { 
           imanagedatabase = dbase; 
          } 
         } 
        } 
        catch (Exception ex) 
        { 
         throw ex; 
        } 
       } 

       public void openImanageDoc(string docNo, string versionNo, string server, string database, bool isReadOnly = true) 
       { 
        IManDocument doc; 
        try 
        { 
         imanageLogin(server, database); 
         int iDocNo = int.Parse(docNo); 
         int iVersion = int.Parse(versionNo); 
         doc = imanagedatabase.GetDocument(iDocNo, iVersion); 
         openNRTDocument(ref doc, isReadOnly); 
         imanagedatabase.Session.Logout(); 
         myDMS.Close(); 
        } 
        catch (Exception Ex) 
        { 
         imanagedatabase.Session.Logout(); 
         throw Ex; 
        } 
        finally 
        { 
         imanagedatabase = null; 
         myDMS = null; 

        } 
       } 


       public void openNRTDocument(ref IManDocument nrtDocument, Boolean isReadonly) 
       { 
        OpenCmd cmd = new OpenCmd(); 
        ContextItems objContextItems = new ContextItems(); 


        objContextItems.Add("NRTDMS", myDMS); 
        objContextItems.Add("SelectedNRTDocuments", new[] { (NRTDocument)nrtDocument.LatestVersion }); 
        objContextItems.Add("IManExt.OpenCmd.Integration", false); 
        objContextItems.Add("IManExt.OpenCmd.NoCmdUI", true); 

        cmd.Initialize(objContextItems); 
        cmd.Update(); 
        cmd.Execute(); 

       } 
      } 
     } 

、私はプログラミングに非常に新しいですと、私は完全に間違っている可能性が、それは構成の問題ではなく、コードの誤りである想定しています。

私は、w3wp.exeがアプリケーションプールによって作成されたIISワーカープロセスであることを知りましたが、数値コードが何を表しているのかわかりません。助けやアドバイスをいただければ幸いです。

答えて

2

OpenCmdインスタンスがローカルレジストリ設定などのリソースにアクセスしようとしている可能性が高いため、エラーが発生しています。 ActiveX(Internet Explorerに固有の)のような独自のテクノロジでコードをホストしない限り、Webアプリケーションでこれを行うことはできません。

ここでOpenCmdを使用することは適切ではありません。これらのタイプのコマンド(iManage "ICommand"実装)は、iManage FileSiteまたはDeskSiteクライアントがインストールされている通常のWindowsアプリケーションで使用するためのものです。これらのコマンドはすべて、いわゆる拡張性COMライブラリ(iManExt.dll、iManExt2.dllなど)の一部であり、Webアプリケーションで使用しないでください。少なくとも、レジストリへのアクセスを不適切に試みる可能性があるため、注意して使用してください。発見したことがあります。あるいは入力Win32ダイアログを表示することさえできます。

ウェブアプリケーションの場合は、自分自身を低レベルのiManage COMライブラリ(IManage.dll)に制限してください。これは、iManage自身があなたが何をすべきか。おそらく、自分の職場のWebアプリケーション

で何をすべきか、実際にあることはあなたのopenNRTDocument方法は、このようなものに置き換えです:

あなたがちょうど戻ってくるMVC Webアプリケーションで
// create a temporary file on your web server.. 
var filePath = Path.GetTempFileName(); 
// fetch a copy of the iManage document and save to the temporary file location 
doc.GetCopy(filePath, imGetCopyOptions.imNativeFormat); 

FileContentResult、このような何か:あなたはこのような何かを行うことができ、Webフォームアプリケーションで

// read entire document as a byte array 
var docContent = File.ReadAllBytes(filePath); 
// delete temporary copy of file 
File.Delete(filePath); 
// return byte stream to web client 
return File(stream, MediaTypeNames.Application.Octet, fileName); 

// set content disposition as appropriate - here example is for Word DOCX files 
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; 
// write file to HTTP content output stream 
Response.WriteFile(filePath); 
Response.End(); 
+0

ありがとうございました。私は、これらの機能がWebアプリケーション内で機能しないことを知りませんでした。私がウェブアプリにいた唯一の理由は、テストすることでした。私はActiveXコントロールとして使用しようとしています。 コードをActiveXコントロールプロジェクトにコピーしましたが、エラーは発生しなくなりました。 –

関連する問題