Приложение не запускается с производственного веб-сервера

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

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

            System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo(@"D:\run.bat");             
            PSI.UserName = "username";
            PSI.Domain = "domain";
            System.Security.SecureString securePwd = new System.Security.SecureString();
            string password = "password";
            foreach (char c in password)
            {
                // Append the character to the password.
                securePwd.AppendChar(c);
            }
            PSI.Password = securePwd;
            PSI.UseShellExecute = false;
            process.StartInfo = PSI;
            PSI.Arguments = SiteId.Text + " " + WebServiceUrl.Text + " " +LogFile.Text;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();

person Pritam Karmakar    schedule 14.05.2011    source источник
comment
Это может показаться глупым, но уверены ли вы, что развернули run.bat и на сервере (и что на сервере также есть диск D:\)?   -  person SirViver    schedule 15.05.2011
comment
Да, run.bat доступен в этом месте. Когда я запускаю его вручную после входа на этот сервер, он работает нормально.   -  person Pritam Karmakar    schedule 15.05.2011
comment
У меня также есть доступ администратора к этому серверу, поэтому я не уверен, что это проблема с разрешением, даже журнал событий также не регистрирует никаких ошибок.   -  person Pritam Karmakar    schedule 15.05.2011
comment
+1 за разрешения. Большинство рабочих веб-серверов настроены так, чтобы НЕ видеть файловые системы за пределами каталогов веб-контента, чтобы предотвратить любую возможность загрузки '../../../etc/shadow' (например)... так что попробуйте поставить run.bat где-нибудь в каталоге веб-контента prod-server-apps.   -  person corlettk    schedule 15.05.2011
comment
Да, и некоторые веб-серверы настроены НЕ запускать внешние процессы в качестве еще одной меры безопасности.   -  person corlettk    schedule 15.05.2011
comment
Спасибо, я скопировал весь инструмент в папку App_data, но он все равно не работает. Затем я попытался запустить какое-то надежное приложение, такое как notepad.exe, и снова я вижу, что оно работает на моем локальном компьютере и открывает новый блокнот, но тот же код не работает с веб-сервера. Я изменил эту строку System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo(notepad.exe);   -  person Pritam Karmakar    schedule 15.05.2011
comment
Если это не поможет, вы можете получить лучшие результаты при сбое сервера.   -  person Brian Webster    schedule 15.05.2011
comment
можете ли вы запустить ProcessExplorer, отфильтрованный для рабочего процесса ASP.NET (w3wp.exe ), чтобы убедиться, что это проблема с разрешениями? это работало для меня раньше.   -  person Menahem    schedule 15.05.2011
comment
любое окончательное решение с полным образцом исходного кода, работающим над этим?   -  person Kiquenet    schedule 05.07.2013


Ответы (2)


Во-первых:

  • Проверьте подлинность вашего пула приложений (дополнительные параметры).
  • Переключите идентификатор на «система» и посмотрите, запускается ли пакетный файл из веб-приложения.

Если да:

  • Измените личность обратно на сетевую службу,
  • Убедитесь, что ваш пакетный файл имеет разрешения на выполнение, применяемые для сетевой службы пользователя (или любого другого удостоверения, которое вы выбрали)

Если это не так:

  • Попробуйте открыть файл со своим кодом и добавить в конец какой-нибудь безобидный текст.
  • Если это работает, вы можете, по крайней мере, исключить проблемы с разрешениями и возможностью просмотра веб-приложения.
person Brian Webster    schedule 15.05.2011
comment
Со вчерашнего дня я провожу много исследований вокруг этого. И я могу запустить notepad.exe с веб-страницы asp.net. Я полностью удалил приведенный выше код и использую только Process.Start(notepad.exe). Это запускает блокнот, но когда я проверяю его в диспетчере задач, этот процесс запускается с именем пользователя сетевой службы. Когда я заменяю notpad.exe своим командным файлом, я вижу то же наблюдение. Но мое приложение не может работать в учетной записи сетевой службы. Поэтому я попытался выполнить его с определенным именем пользователя и паролем с помощью этой строки Process.Start(notepad.exe, имя пользователя, securePwd, домен) и заметил, что он не запускает какой-либо процесс блокнота. - person Pritam Karmakar; 16.05.2011
comment
Я пробовал это как с сетевой службой настройки идентификатора пула приложений, так и с идентификатором пула приложений, но не вижу его выполнения. Заранее спасибо, если вы знаете что-нибудь об этом и опубликуйте это здесь. - person Pritam Karmakar; 16.05.2011

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

Process.Start("notepad");

Но если я использую эту строку кода, он даже не запускает блокнот на этом сервере.

            string password = "XXXXX";
            System.Security.SecureString securePwd = new System.Security.SecureString();
            foreach (char c in password)
            {
                // Append the character to the password.
                securePwd.AppendChar(c);
            }
            Process.Start("notepad", "username", securePwd, "domain");

Я задам отдельный вопрос по этому поводу. Спасибо всем, кто ответил.

person Pritam Karmakar    schedule 16.05.2011