【问题标题】:Process.Start is not working after hosting asp.net web application in IIS在 IIS 中托管 asp.net Web 应用程序后,Process.Start 无法正常工作
【发布时间】:2012-02-01 04:42:55
【问题描述】:

我有一个返回 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);

【问题讨论】:

  • “不工作”是什么意思?会发生什么?
  • 您如何在服务器文件夹中保存文件并从该位置检索保存的文件,提供代码。还有你在Process.Start做什么@
  • 记录错误信息,粘贴到这里;也许您在共享主机上存在部分信任问题。
  • 嗨,我已经添加了保存和检索文件的代码。请再次检查我的问题。
  • 建议:使用Path.Combine创建文件或文件夹路径

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


【解决方案1】:

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

建议

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

希望这对你有用。

【讨论】:

  • 我可以创建文件。但唯一的问题是我无法查看保存的文件。我在哪里可以找到 IIS_WPG 用户以及如何授予修改权限?
  • 如果可以保存文件,则不是安全问题。你能检查你是否正在保存和检索相同的文件吗?您也可以尝试抛出错误if (fileToDownload.Exists) 失败。什么是PONumber,您正在使用该名称保存文件并使用lnkFileName.Text 检索
  • 实际上 PONumber 是一个自动生成的。所选文件将作为 PONumber + 其扩展名保存在文件夹中。例如:记事本文件将作为“PO-11-009.txt”保存在文件夹中。因此,在保存文件后,文件名“PO-11-009.txt”将作为文本分配给 LinkBut​​ton。所以我可以通过获取 LinkBut​​ton Text 来检索文件名。
  • 在这种情况下,您的Process.Start 将尝试启动.txt 文件,它会尝试为此打开默认编辑器,很可能是记事本。但是不要以为IIS有权限启动记事本,需要检查一下。您想通过Process.Start 实现什么目标?
  • Process.Start(filenamewithfullpath);在那里,我给出了要打开的文件的完整路径。通过使用这个,我只想打开路径中的文件。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多