我将拥有一个可在许多客户端上运行的ASP.NET MVC应用程序,所有客户端都运行自己的本地版本的IIS。我试图用Process.Start()打开一个PowerPoint文件。 PowerPoint已成功打开(我可以在任务管理器中看到它),但它在后台运行,我希望它在前台打开。
为了启动应用程序,我使用以下代码:
string powerPointPath = @"C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE";
string powerPointFilePath = "\"" + filePath;
Process powerPoint = new Process();
powerPoint.StartInfo.FileName = powerPointPath;
powerPoint.StartInfo.Arguments = " /S " + filePath;
powerPoint.Start();
由于我使用的是本地IIS实例,因此我确保将PowerPoint可执行文件的读取权限授予IIS APPPOOL\DefaultAppPool
用户。有没有办法确保PowerPoint在前台运行?
编辑:在Visual Studio中使用IIS Express时,我能够毫无问题地运行此代码(在这种情况下,应用程序使用MYNAME\myname
用户权限)但是在使用本地IIS时(例如,当应用程序使用IIS APPPOOL\DefaultAppPool
用户时),它似乎不能正常工作。
答案 0 :(得分:1)
问题是IIS在服务帐户下运行,您需要PowerPoint进程作为当前登录的交互式用户启动 - 无论是谁。
也许尝试this回答看看它是否也适用于IIS进程? (但可以使用CreateProcessAsUser代替this approach。
另一种方法是编写一个完全独立的东西,它将在当前用户的system tray下运行,并让它“监听”由Web应用程序发送的信号,例如:打开命名管道甚至轮询目录以查找文件。例如,您的Web应用程序可以将PowerPoint文件复制到约定的文件夹中,托盘应用程序将监视它(使用FileSystemWatcher)并自动打开它在文件夹中看到的任何内容。托盘应用程序作为交互式用户运行,因此无需克服跨用户边界。
答案 1 :(得分:0)
Asp.net代码在服务器端运行,因此 process.Start(); 在服务器端启动进程,如果要打开,可以使用IE的activex对象或其他浏览器的等效对象客户端