System.Diagnostics.Process.Start()在Web服务器中不起作用

时间:2012-01-26 20:10:19

标签: c# asp.net .net

我有一个C#asp.net网页,它从Mysql数据库(以longblob格式存储)读取PDF文件并打开它。它适用于我的Localhost;页面从数据库中读取文件并使用acrobat reader打开,但在部署页面后它在测试服务器中不起作用。 acrobat阅读器无法打开,我在taskmgr管理器中看不到acroRd32.exe。我觉得这是权限问题,因为我使用process.start()可能不允许在服务器但我没有看到错误消息。如果有权限需要在服务器上完成;有人可以指点我的方向吗?

谢谢。

以下是我的代码:

MySqlDataReader Reader = null;
connection.Open();
MySqlCommand command = new MySqlCommand("Select Image, File_Type, File_Name from table where ImageID = " + ImageID, connection);
Reader = command.ExecuteReader();

if (Reader.Read())
{
    byte[] buffer = (byte[])Reader["Image"];
    System.IO.MemoryStream stream1 = new System.IO.MemoryStream(buffer, true);
    stream1.Write(buffer, 0, buffer.Length);

    String fileName = Reader["File_Name"].ToString();
    String dirName = "C:\\thefolder\\";
    if (!Directory.Exists(dirName))
    {
        // if not then create
        Directory.CreateDirectory(dirName);
    }
    if (File.Exists(dirName+fileName))
        File.Delete(dirName + fileName);
    Directory.CreateDirectory(Path.GetDirectoryName(Reader["File_Name"].ToString()));

    using (Stream file = File.Create(dirName + fileName))
    {
        file.Write(buffer, 0, buffer.Length);
    }
    Process process = new Process();
    process.StartInfo.FileName = "AcroRd32.exe";
    process.Start();                    
}

感谢您的帮助,我可以通过回复发送pdf内容。这是代码

//Process process = new Process();
//process.StartInfo.FileName = "AcroRd32.exe";
//process.Start();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment");
Response.TransmitFile(dirName + fileName);
Response.End();

2 个答案:

答案 0 :(得分:7)

您的C#代码在服务器上运行 因此,Process.Start在服务器而不是您的计算机上启动进程。

根本不可能直接在客户端上启动进程。

但是,如果您在HTTP响应中提供PDF(使用正确的Content-Type),浏览器将在PDF查看器中打开它。

答案 1 :(得分:2)

您无权从ASP.Net工作进程执行此操作。 你需要冒充:

ASP.NET Impersonation

How To: Use Impersonation and Delegation in ASP.NET 2.0


没有彻底阅读这个问题...... 如果您不想在服务器上启动进程,则可以使用模拟。 否则,您应该从IIS提供此文件 - 以允许用户下载它。

Serving Dynamic Content with HTTP Handlers

或者如果您使用的是ASP.NET.MVC:

ASP.NET MVC - How do I code for PDF downloads?