Процесс запуска IIS Server

1

Я не могу назвать Process.Start("DocToPDF.exe", "file.docx file.pdf") успешно из IIS.

  • Я попытался разрешить взаимодействие с ПК с помощью службы IIS Admin Service;
  • Я попытался предоставить полные права доступа к DefaultAppPool для каталога, содержащего DocToPDF.exe

Ничего из этого не сработало. DocToPDF.exe выходит с кодом: 1 (я пишу код выхода в файл...). Когда я запускаю веб-сайт в режиме отладки (F5), программа выходит с кодом: 0, и все в порядке. Он отлично работает в режиме отладки. Я предполагаю, что это имеет какое-то отношение к разрешениям IIS или что-то в этом роде, потому что, как я уже сказал, это хорошо работает при запуске приложения из visual studio.

Вот метод, который я использую:

public byte[] DocToPdf(MemoryStream ms)
{            
    string fileName = Guid.NewGuid().ToString();
    string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\" + fileName + ".docx";
    string newPath = path.Replace("docx", "pdf");
    FileStream fs = new FileStream(path.ToString(), FileMode.OpenOrCreate);
    fs.Write(ms.ToArray(), 0, ms.ToArray().Length);
    fs.Close();

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.FileName = @"C:\Utils\OfficeToPDF.exe";
    p.StartInfo.Arguments = path + " " + newPath;
    p.Start();
    p.WaitForExit();
    System.IO.File.WriteAllText(@"C:\Utils\exitcode.txt", p.ExitCode.ToString());

    var bytes = System.IO.File.ReadAllBytes(newPath);

    System.IO.File.Delete(path);
    System.IO.File.Delete(newPath);

    return bytes;            
}
  • 0
    stackoverflow.com/questions/8414514/… аналогичный вопрос.
  • 0
    Проверьте личность пула приложений ( iis.net/learn/manage/configuring-security/… ). Есть ли у него локальные права входа? Есть ли у него разрешения на доступ к папке c:\utils ? У него есть разрешение на папку% AppData%?
Показать ещё 4 комментария
Теги:
iis

1 ответ

3
Лучший ответ

Практически всегда бывает ужасной мысль назвать любой процесс с веб-сайта/приложения IIS.

  1. IIS и его рабочие процессы выполняются в сеансе 0. Изоляция сеанса может привести к проблемам, если дополнительный исполняемый файл должен запускаться в сеансе пользователя. (Очень вероятно, что вы ударите его, как если бы исполняемый файл попытался использовать драйверы печати, он столкнется с проблемами в сеансе 0.)
  2. Рабочие процессы IIS работают под идентификаторами пула приложений (без загрузки профиля пользователя, если вы не изменяете настройки пула). Подобные идентификаторы также могут привести к сбоям, поскольку для исполняемого файла может потребоваться обычная учетная запись пользователя.

Слишком много исполняемых файлов не запускается под IIS, поэтому ваш не является чем-то новым или необычным.

Между тем, когда вы нажимаете F5 в Visual Studio, ваше приложение запускается под ASP.NET Development Server или IIS Express по умолчанию и в вашем пользовательском сеансе. Все, что там работает, может быть нарушено при переключении на IIS. Поэтому не удивляйтесь, как мало вы понимаете в IIS/Windows. Каждый специалист был новичком.

Типичным обходным решением является поиск альтернативного способа, который поддерживается или рекомендуется Microsoft или сторонним поставщиком. Обратите внимание, что бесплатные и открытые исходные файлы обычно разрабатываются или тестируются без учета такого сеанса 0, и они могут привести к большему количеству проблем, чем вы думали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню