.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"を使ってスライドショープレゼンテーションのウィンドウを一番上の位置に設定しようとしましたが、同じ結果が得られました。