1 votes

Utilisation de IIS6 pour exécuter le processus kill. L'exécutable se bloque

J'utilise le code suivant (plusieurs variantes possibles) dans une page Web qui est censée tuer un processus sur le serveur :

    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();

Le fichier VBS est censé tuer un autre processus w3wp.exe, qui a tendance à se bloquer. Il s'agit d'une ancienne application web que nous allons bientôt remplacer, mais en attendant, nous devons nous débrouiller et forcer l'application à s'arrêter lorsque cela se produit.

Je dois noter que tuer w3wp.exe n'est pas quelque chose que les professionnels de l'informatique font.

Ce qui se passe, c'est que WScript.exe est dans le gestionnaire de tâches à chaque fois que je lance la page de suppression, et il ne disparaît jamais.

Le processus WScript.exe (et j'en ai essayé d'autres comme psexec.exe) est exécuté en tant qu'utilisateur local avec des droits d'administrateur (et j'ai essayé d'autres types d'utilisateurs, y compris des administrateurs de domaine) lorsqu'il est exécuté depuis IIS, mais il fonctionne lorsqu'il est exécuté depuis la ligne de commande sur le serveur.

2voto

TristanK Points 8893

Oui, oui, il devrait. Network Service est un compte de niveau utilisateur au mieux et AFAIK IIRC ne sera capable de tuer que les processus qu'il a démarré.

Si la tâche s'exécute sur le serveur lui-même, le plus simple est probablement d'exiger l'authentification intégrée de Windows pour la page, et de l'ACLer de sorte que seuls les administrateurs et le système puissent la lire.

Cela permettra de s'assurer que seuls les administrateurs peuvent se connecter à la page, et qu'il y a un peu de responsabilité autour de qui a tué le processus.

Par ailleurs, une autre réflexion : avez-vous confirmé que KillMyProcess.vbs fonctionne de manière fiable lorsqu'il est exécuté de manière interactive avec le programme cscript killmyprocess.vbs ?

1voto

Ryan Bolger Points 16332

Je réalise que cela ne répond pas vraiment à votre question directement. Mais ne serait-il pas plus logique d'éliminer IIS et l'intervention manuelle de l'utilisateur de l'équation ? En l'absence d'un outil de surveillance réel (SCOM, Nagios, etc.), je pense que vous pouvez écrire un script qui s'exécute périodiquement via un planificateur de tâches sur le serveur en cause et qui peut détecter si l'application est suspendue et prendre les mesures appropriées.

Pourquoi attendre que quelqu'un remarque le problème et doive ensuite prendre le temps de le régler lui-même ? Il suffit d'automatiser le problème jusqu'à ce que vous puissiez vous débarrasser de l'ancienne application.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X