Назад | Перейти на главную страницу

Использование IIS6 для запуска процесса уничтожения. Исполняемый файл зависает

Я использую следующий код (любые опробованные варианты) на веб-странице, которая должна убить процесс на сервере:

    Process scriptProc = new Process();
    SecureString password = new SecureString();
    password.AppendChar('p');
    password.AppendChar('s');
    password.AppendChar('s');
    password.AppendChar('w');
    password.AppendChar('d');
    scriptProc.StartInfo.UserName = "mylocaluser";
    scriptProc.StartInfo.Password = password;
    scriptProc.StartInfo.FileName = @"C:\WINDOWS\System32\WScript.exe";
    scriptProc.StartInfo.Arguments = @"c:\windows\system32\killMyApp.vbs";
    scriptProc.StartInfo.UseShellExecute = false;
    scriptProc.Start();
    scriptProc.WaitForExit();
    scriptProc.Close();

Предполагается, что файл VBS убивает другой процесс w3wp.exe, который имеет тенденцию блокироваться. Это устаревшее веб-приложение, которое мы собираемся заменить в ближайшее время, но пока нам нужно прихрамывать и принудительно закрывать приложение, когда это происходит.

Должен заметить, что убийство w3wp.exe - это не что-то I.T. профессионалы делают.

Происходит следующее: WScript.exe находится в диспетчере задач каждый раз, когда я запускаю страницу уничтожения, и никогда не исчезает.

Процесс WScript.exe (и я пробовал другие, такие как psexec.exe) запускается как локальный пользователь с правами администратора (и я пробовал другие типы пользователей, включая администраторов домена) при запуске из IIS, но он работает при запуске из командная строка на сервере.

Да, да, должно. Сетевая служба - это в лучшем случае учетная запись на уровне пользователя, и AFAIK IIRC сможет уничтожать только запущенные процессы.

Если задача выполняется на самом сервере, проще всего, вероятно, потребовать встроенную проверку подлинности Windows для страницы и ACL, чтобы ее могли прочитать только администраторы и система.

Это гарантирует, что только администраторы могут войти на страницу, и есть небольшая ответственность за то, кто убил процесс.

Еще одна мысль: вы подтвердили, что KillMyProcess.vbs надежно работает при интерактивном выполнении с cscript killmyprocess.vbs?

Я понимаю, что это не дает прямого ответа на ваш вопрос. Но разве не имеет смысла исключить IIS и ручное вмешательство пользователя из уравнения? Если не использовать фактический инструмент мониторинга (SCOM, Nagios и т. Д.), Я бы подумал, что вы могли бы написать сценарий, который периодически запускается через планировщик задач на сервере-нарушителе, который может определить, зависло ли приложение, и предпринять соответствующие действия.

Зачем ждать, пока кто-то действительно заметит проблему, а потом тратить время на ее устранение? Просто автоматизируйте проблему, пока не сможете избавиться от устаревшего приложения.