Выполнение командного файла из проблемы с разрешением C #

У меня есть пакетный файл для выполнения сценария VB. При выполнении пакетного файла двойным щелчком будет работать, но когда я сделал то же самое с С#, он работает в моей локальной среде, но не на промежуточном сервере (Windows Server 2008r2). Есть ли какой-либо уровень разрешений, который мне нужно применить для этого выполнения? . С промежуточного сервера я могу дважды щелкнуть и выполнить пакетный файл...

Я вошел на сервер с учетной записью администратора и просмотрел приложение как localhost.

Есть ли что-то, чего мне не хватает при выполнении пакетного файла из С#,

Я не думаю, что есть какие-либо проблемы с моим кодом С#, поскольку он отлично работает в моей локальной среде, в любом случае ниже приведен мой код С#,

if (File.Exists(FileName*))
            {
                System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo(FileName);
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = FileName;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.UseShellExecute = false;

                proc.Start();

                proc.WaitForExit();

            }
            else
            {
                lblMsg.Text = "Sorry unable to process you request";
            }

*FileName – это путь к пакетному файлу. Также я установил полное разрешение для папок, содержащих как пакетные файлы, так и файлы vbs.


person sudheshna    schedule 02.05.2012    source источник
comment
Я считаю, что вы должны указать пользователя в IIS, чтобы ваш пул приложений имел разрешение на рабочий каталог пакетного сценария.   -  person Habib    schedule 02.05.2012


Ответы (2)


Чтобы это работало, ваш пул приложений должен запускаться от имени пользователя, имеющего доступ к пакетному файлу. Узнайте, как изменить идентификатор пула приложений для IIS 7 или IIS 6.

person Kartheek N    schedule 02.05.2012
comment
Спасибо, Kartheek, за ваш ответ, я использую учетную запись администратора для доступа к серверу и захожу на веб-сайт как localhost. Я установил идентификатор пула приложений в пользовательский режим и установил эту учетную запись администратора и пароль, но он все еще не работает, и я использую IIS7. - person sudheshna; 03.05.2012

Чтобы расширить то, что сказал Картик:

  • В IIS 7 пулы приложений запускаются как учетная запись пула приложений, IISAPPPOOL\AppPoolName
  • В IIS 6 пулы приложений работают как Network Service
  • В любом случае эти учетные записи не имеют доступа к папке документов пользователя и (по умолчанию) могут только читать из общих хранилищ данных.

Как правило, вы хотите сохранить учетную запись пула приложений, потому что она помогает разделить данные, поэтому я бы просто удостоверился, что вы предоставляете разрешения на чтение и выполнение для файла bat, необходимого для учетной записи пула приложений. Вам также потребуются соответствующие разрешения для любых файлов/папок, из которых летучая мышь должна читать/записывать.

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

Как правило, при работе на веб-сервере вы хотите, чтобы уровни разрешений/выполнения были как можно более низкими/ограничительными.

person debracey    schedule 02.05.2012
comment
Спасибо debracey за ваш ответ, я уверен, что это проблема, но я не знаю, как с этим разобраться, я пытаюсь это сделать. - person sudheshna; 03.05.2012
comment
Это просто манипулирование разрешениями так же, как и для любого другого файла на Windows Server, поищите изменение разрешений NTFS [версия сервера] - person debracey; 03.05.2012