Система.Диагностика.Процесс.Start() генерирует всплывающее сообщение об ошибке приложения в журналах событий

#asp.net #event-log

#asp.net #журнал событий

Вопрос:

Я использую следующий фрагмент кода для выполнения IISReset на удаленных серверах с использованием Asp.Net Веб-приложение. Веб-сайт размещен на компьютере под управлением Windows server 2003 с IIS 6.0, а удаленные серверы также работают под управлением Windows server 2003 (IIS 6.0). Этот код абсолютно нормально работает в моей среде разработки и успешно выполняет сброс IIS на удаленных серверах, но когда я развернул это на реальном сервере, он ничего не делает. Приложение практически не реагирует, когда я нажимаю кнопку для сброса IIS на веб-странице и генерирую следующую ошибку в журнале событий.:

*Всплывающее окно приложения: iisreset.exe — Ошибка приложения: приложению не удалось правильно инициализироваться (0xc0000142). Нажмите «ОК», чтобы завершить работу приложения.*

 string pass = CommonMethods.GetSecureAppSettings("priviledgedUserPwd");
    ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
    psi.UserName = CommonMethods.GetSecureAppSettings("priviledgedUser");
    psi.Password = pass.ToSecureString();
    psi.FileName = @CommonMethods.GetAppSettings("ExecutablePath")   "iisreset.exe";
    psi.WindowStyle = ProcessWindowStyle.Normal;
    psi.Arguments = server.IP;
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    System.Diagnostics.Process listFiles;
    listFiles = Process.Start(psi);
    StreamReader outPut = listFiles.StandardOutput;
    listFiles.WaitForExit(10000);
    if (listFiles.HasExited)
    {
        Logger.Audit(AUDIT_TITLE, outPut.ReadToEnd());
    }
    else
    {
        throw new Exception("Failed to start the process successfully");
    }
    return listFiles.ExitCode;
  

Здесь путь к исполняемому файлу C:WindowsSystem32 и привилегированный пользователь является членом группы администраторов, поэтому все разрешения уже установлены. Я также пробовал олицетворение без какой-либо помощи.

Пожалуйста, предложите, как исследовать эту проблему дальше.

Заранее большое спасибо.

Комментарии:

1. Просто предположение, но что происходит, когда вы устанавливаете UseShellExecute значение быть true ? Вероятно, вы потеряете возможность считывать выходные данные, как вы делаете сейчас, но если это решит проблему, это может быть справедливая цена, IMO..

2. Поскольку мне нужно запустить этот процесс с определенным пользователем, UseShellExecute должен иметь значение ‘false’. Без предоставления учетных данных пользователя запустить его на удаленных машинах будет невозможно … как я могу проверить, не повреждено ли что-то на действующем сервере?

3. Не знаю, как проверить, не повреждено ли что-нибудь, но у меня есть другая идея.. что, если вы будете запускаться cmd.exe как процесс, передавая его iisreset.exe в качестве аргумента?