在IIS中托管asp.net Web应用程序后,Process.Start无法正常工作

时间:2012-02-01 04:42:55

标签: c# asp.net visual-studio-2008 iis

我返回一个c#代码,用于将文件保存在服务器文件夹中,并从该位置检索保存的文件。但是这个代码在本地机器上运行良好。但是在IIS中托管应用程序后,我可以将文件保存在所需的位置。但我无法使用

从该位置检索文件
Process.Start

会出现什么问题?我在谷歌搜索过,我发现它可能是由于访问权限。但我不知道究竟会出现什么问题以及如何解决这个问题?请问有关如何解决这个问题的任何人请帮帮我?

保存文件:

string hfBrowsePath = fuplGridDocs.PostedFile.FileName;
if (hfBrowsePath != string.Empty)
{
    string destfile = string.Empty;
    string FilePath = ConfigurationManager.AppSettings.Get("SharedPath") + ConfigurationManager.AppSettings.Get("PODocPath") + PONumber + "\\\\";
    if (!Directory.Exists(FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1)))
       Directory.CreateDirectory(FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1));
    FileInfo FP = new FileInfo(hfBrowsePath);

    if (hfFileNameAutoGen.Value != string.Empty)
    {
        string[] folderfiles = Directory.GetFiles(FilePath);
        foreach (string fi in folderfiles)
        File.Delete(fi);
        //File.Delete(FilePath + hfFileNameAutoGen.Value);
    }
    hfFileNameAutoGen.Value = PONumber + FP.Extension;
    destfile = FilePath + hfFileNameAutoGen.Value;
    //File.Copy(hfBrowsePath, destfile, true);
    fuplGridDocs.PostedFile.SaveAs(destfile);
}

要检索文件:

String filename = lnkFileName.Text;
string FilePath = ConfigurationManager.AppSettings.Get("SharedPath") + ConfigurationManager.AppSettings.Get("PODocPath") + PONumber + "\\";
FileInfo fileToDownload = new FileInfo(FilePath + "\\" + filename);
if (fileToDownload.Exists)
     Process.Start(fileToDownload.FullName);

2 个答案:

答案 0 :(得分:2)

看起来像文件夹安全问题。存储文件的文件夹用户组必须具有修改访问权限。基本上有用户(不确定但是IIS_WPG)运行IIS进程,该用户属于用户组,此用户必须在您所在的文件夹上具有修改访问权限正在做读写。

<强>建议

  • 使用Path.Combine创建文件夹或文件路径。
  • 您可以使用String.Format创建字符串。
  • 如果您有相同的表达式重复自己,请创建局部变量,如FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1)

希望这适合你。

答案 1 :(得分:1)

您可能必须为正在运行的应用程序池授予权限。请参阅此链接http://learn.iis.net/page.aspx/624/application-pool-identities/

您还可以使用内置帐户的“LocalSystem”之一作为应用程序池标识,但它存在一些安全问题。