Process.Start не работает после размещения веб-приложения asp.net в IIS - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть код возврата AC # для сохранения файла в папке сервера и для извлечения сохраненного файла из этого местоположения.Но этот код работает нормально на локальной машине.Но после размещения приложения в IIS я могу сохранить файл в нужном месте.Но я не могу получить файл из этого места, используя

Process.Start

В чем проблема?Я искал в Google, и я узнал, что это может быть связано с правами доступа.Но я не знаю, какая будет точная проблема и как ее решить?Кто-нибудь, пожалуйста, помогите мне о том, как решить эту проблему?

Чтобы сохранить файл:

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 ]

2 голосов
/ 01 февраля 2012

Похоже, проблема безопасности папки. Папка, в которой вы храните файлы, Пользователи , группа должна иметь Изменить доступ. Обычно есть пользователь (не уверен, но это IIS_WPG), под которым запускается процесс IIS, этот пользователь принадлежит к группе Users , этот пользователь должен иметь доступ Modify к папке, в которой вы выполняете читать пишет.

Предложения

  • Используйте Path.Combine для создания пути к папке или файлу.
  • Вы можете использовать String.Format для создания строк.
  • Создайте локальные переменные, если у вас есть такое же выражение, повторяющееся как FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1)

Надеюсь, это работает для вас.

1 голос
/ 01 февраля 2012

Возможно, вам придется дать разрешения пулу приложений, который вы запускаете. см. эту ссылку http://learn.iis.net/page.aspx/624/application-pool-identities/

Вы также можете использовать один из «LocalSystem» встроенной учетной записи в качестве удостоверения пула приложений, но у него есть некоторые проблемы с безопасностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...