Я работаю с Process, и у него странное поведение. Мне нужно выполнить код с помощью программы Process my WebSections.exe. Интересно, когда я передаю неправильные параметры, он показывает результат, что он неправильный, когда я передаю правильные параметры, он ничего не показывает, как будто он вообще ничего не выполняет. Итак, параметры для моей программы - это WebSections.exe f (файл .xml). Но если я вызываю с теми же параметрами, что и в коде, но прямо из командной строки, это работает.
А также я прокомментировал .ExitCode, потому что он показывает: «System.Exception: программа возвращена с кодом ошибки 2 на простой странице». Но с комментариями вроде работает.
Process p;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "C:\\inetpub\\WebSections\\Program\\WebSections.exe";
psi.Arguments = "f C:\\Users\\HrchM\\Desktop\\Program\\Current_Diagram\\diagramResult.xml";
psi.WorkingDirectory = "C:\\inetpub\\WebSections\\TempFolder";
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
p = Process.Start(psi);
try
{
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit(60000);
/* if (p.ExitCode != 0)// returns 255 when it can’t write to the temp folder (C:\inetpub\WebSections, CZ-CRM\IIS_IUSRS, Modify, replace all child objects)
throw new Exception("Program returned with error code " + p.ExitCode); */
ViewData["Content"] = output.ToString();
}
catch (Exception ex)
{
ViewData["Content"] = ex.ToString();
}
finally
{
p.Close();
p.Dispose();
}
Я уверен, что использую ту же программу (WebSections.exe), но с другими параметрами в приложении, и все работает нормально.
Вы говорите: с другими параметрами. Тогда это означает, что проблема связана с параметрами эти. Осторожно: вы передаете путь к файлу на рабочий стол пользователя. Это недоступно даже для администраторов, если это явно не разрешено. Просто в качестве пробы: скопируйте этот файл по пути, например c:\temp, где каждый может его найти, убедитесь, что он доступен для чтения (и записи, если это необходимо вашему приложению) всем, и попробуйте оттуда.
Хм... кажется, у меня проблема с файлом .xml. У меня есть пример .xml, и он работает с этим файлом примера, но не работает с динамически созданным файлом. Я не понимаю, какая между ними разница. И самое смешное, что мой динамически созданный файл работает, если я вызываю WebSections.exe прямо из CMD, а не через C# Process....
Попробуйте запустить cmd от имени удостоверения пула приложений и/или добавьте ведение журнала в WebSections.exe, если это ваш код.
Вы имеете в виду вызов cmd вместо WebSections.exe? Ну, теперь у него бесконечная загрузка..
Нет. Просто чтобы увидеть, как WebSections.exe работает под идентификатором, в котором он действительно должен работать, запустите cmd под идентификатором пула приложений, который вы используете в IIS для своего приложения, и выполните ту же команду, из которой вы уже запускали команд. На этот раз будет работать не под вашей личностью, а под пулом приложений.
Извините, если я вас не понимаю или поясняю. Вы хотите, чтобы я вызвал cmd с Process и передал туда свой WebSections.exe?
Нет!!! Вариант 1: runasss64.com/nt/runas.html Вариант 2: найдите cmd.exe в меню «Пуск», щелкните его правой кнопкой мыши, выберите Запуск от имени другого пользователя, укажите учетные данные пользователя пула приложений. Затем запустите файл WebSections.exe.
Нашел в чем проблема, не понравился мой путь внутри xml... Сорри за тупость :( И правда спасибо за помощь.





Взгляните сюда: symantec.com/connect/articles/…
2: Система не может найти указанный файл. Насколько я вижу, вы используете ASP.NET MVC, то есть размещены в IIS. Если это законный IIS, а не экземпляр разработки, он будет работать как служба, а ваш код будет выполняться под идентификатором пула приложений. Итак: вы уверены, что у удостоверения пула приложений есть все разрешения файловой системы для выполнения этого процесса со всеми файлами, которые он должен использовать?