2017-01-05 19 views
0

.NET MVC WebアプリケーションからPowerpointプレゼンテーションを実行しようとしています。私はoffice.interopt.powerpointライブラリを使用していますが、VisualStudioを使用している間はすべて正常に動作します。しかし、IISExpressサーバー(VSではなく)にWebアプリケーションをデプロイすると、Powerpointアプリケーションが一番上のウィンドウとして開かず、正常に動作せず、IISサーバーに展開するとPowerpoint全く始まらない。localhostを実行しているASP.NET WebアプリケーションからPowerpointプレゼンテーションを開きます。

IISUSRの資格情報に問題があることはわかっています。(ウェブアプリケーションとして)私はアプリケーションを実行する権限がありません。

問題は:interopライブラリを使って別のユーザーとしてPowerpointアプリケーションを起動する方法はありますか? "ProcessStartInfo"を使って別のユーザーとして新しいプロセスを開始することは可能ですが、もし私がそうするなら、私は開いている必要があるプレゼンテーションごとに1つのPowerpointプロセスを実行する必要があり、プレゼンテーションのコントロールにはアクセスできませんnextSlideのようなものです。そのアイデアは、Powerpointを一度実行してから、多くのプレゼンテーションを開いて閉じ、制御することです。私は今のところ持っている

コード:

(これは一度実行される)パワーポイントのアプリを起動するには:あなたのよう

public void LoadPPT(string pptPath) 
    { 
     try 
     { 
      //Close all opened presentations if any 
      if (ppts.Count > 0) 
       foreach (Presentation p in ppts) 
        p.Close(); 

      //Open new presentation 
      ppt = ppts.Open(pptPath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); 

      SlideShowSettings sss = ppt.SlideShowSettings; 
      sss.Run(); 
      while (app.SlideShowWindows.Count <= 0) ; 
      SlideShowWindow ssw = ppt.SlideShowWindow; 
      ssw.Activate(); 

      //if (!SetWindowPos((IntPtr)ssw.HWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW)) 
      //{ 
      // int error = Marshal.GetLastWin32Error(); 
      // NLog.LogManager.GetCurrentClassLogger().Debug("Error " + error); 
      //} 

      ssv = ssw.View; 
     } 
     catch (Exception e) 
     { 
      NLog.LogManager.GetCurrentClassLogger().Debug("Excepcion en PPT. " + e.Message); 
      while (e.InnerException != null) 
      { 
       NLog.LogManager.GetCurrentClassLogger().Debug("INNER. " + e.InnerException.Message); 
       e = e.InnerException; 
      } 
     } 
    } 

app = new Application(); 
app.Visible = MsoTriState.msoTrue; 
app.PresentationClose += ClosePPT; 
app.Activate(); 
app.WindowState = PpWindowState.ppWindowMinimized; 
ppts = app.Presentations; 

は、新しいプレゼンテーションを開くには私もWin32の "SetWindowPos"を使ってスライドショープレゼンテーションのウィンドウを一番上の位置に設定しようとしましたが、同じ結果が得られました。

答えて

0

.NET MVC WebアプリケーションからPowerpointプレゼンテーションを実行しようとしています。私は

Microsoftは現在、推奨していませんoffice.interopt.powerpointライブラリを使用していて、(ASP、ASPを含む任意の無人、非対話型クライアントアプリケーションまたはコンポーネントから、Microsoft Officeアプリケーションのオートメーションをサポートしていません。 NET、DCOM、およびNTサービス)、Officeがこの環境で実行されると不安定な動作やデッドロックが発生する可能性があるためです。

サーバー側のコンテキストで実行されるソリューションを構築する場合は、無人で実行するために安全にされたコンポーネントを使用するようにしてください。または、コードの少なくとも一部がクライアント側で実行できるようにする代替手段を見つけようとする必要があります。サーバー側のソリューションからOfficeアプリケーションを使用する場合、アプリケーションには正常に実行するために必要な機能が不足しています。さらに、全体的なソリューションの安定性でリスクを冒すことになります。詳細については、Considerations for server-side Automation of Officeの記事をご覧ください。

サーバー側の実行用に設計されたサードパーティコンポーネント(PowerPointプレゼンテーションをホストできるASP.NETコントロール)を使用することを検討することがあります。

関連する問題