如何在iis上运行进程?

时间:2011-05-18 17:04:35

标签: c# asp.net

亲爱的,我有以下代码,可以点击按钮打开文件

  

System.Diagnostics.Process.Start( “soffice.exe”,文件路径);

soffice.exe 是打开.odt文件& filepath 包含我要打开的文件的完整路径。

当我在我的本地系统上执行代码时,这非常有效,但是当我在iis服务器( 5.1 )上托管它时,它没有采取任何操作(事件也没有抛出任何错误) 。 我的文件路径正在访问项目中的文件夹,而不是外部。请提出可能的原因和解决方案

1 个答案:

答案 0 :(得分:5)

回应上述评论......

首先,通过“网络服务帐户”,我不是指网络服务。我的意思是运行Web应用程序的Web服务器上的服务帐户。这可能是登录到网站的用户或默认IIS帐户等的帐户。解决此问题的最佳方法是在调用它时完全限定soffice.exe的路径,这样你就不会不必担心PATH环境变量。 (此外,您不必担心另一个应用程序被恶意或意外地运行并使用未知权限执行意外操作。)

其次,您的方法似乎存在严重的设计缺陷。即使您设法让应用程序在服务器上启动,它也会在服务器上启动 。资源管理器是否位于实际的Web服务器上?如果没有,那么在服务器上的应用程序中打开文件对他没有任何好处。如果他坐在服务器上,那么他是唯一可以使用它的人。

您不想在服务器上打开文件 。您希望将文件传递到客户端。然后,如果用户(示例中的资源管理器)可以在其本地计算机上的soffice.exe中打开该文件。如果他的环境设置正确,它应该自动打开。 (虽然浏览器也会给他选择在本地保存文件,然后打开它。)只需链接到文件就足够了。有什么特别的理由不这样做吗?

如果您需要使用表单帖子而不是简单的链接来传递文件,您仍然可以从服务器端代码流式传输文件。 Here's a previous question discussing how to do that。基本上,该过程涉及清除输出缓冲区,设置headers(内容长度,内容类型,建议的文件名等),流式传输字节以及刷新/关闭输出缓冲区。