2009-01-23 5 views
0

J'ai parcouru page après page de page de données sur le web et tout le monde semble dire que vous ne pouvez pas exécuter un exécutable à distance une application sur une autre machine via WMI et afficher la fenêtre de cette application.démarrer un programme sur une machine distante dans wmi, mais aussi ouvrir la fenêtre des applications (en C#)

Est-ce que quelqu'un sait un moyen de contourner cela?

J'ai essayé de créer 2 exécutables. 1 exécutable utilise la classe Process et démarre simplement un exécutable. Voici le code:

class Program 
{ 
     static void Main(string[ ] args) 
     { 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.CreateNoWindow = false; 
      startInfo.UseShellExecute = false; 
      startInfo.FileName = "C:\\folder\\Mexe.exe"; 
      startInfo.WindowStyle = ProcessWindowStyle.Normal; 
      //p.MachineName="server"; 
      //p.Start(startInfo); 
      Process p = Process.Start(startInfo); 
     } 
} 

Cet exécutable réside sur la machine distante.

J'ai un autre exécutable qui sera sur la machine du client. Cet exe utilise WMI en C# pour exécuter à distance l'application sur le serveur via la ligne de commande. Je reçois un code de retour de 0. Rien ne se passe sur le serveur.

Des idées sur ce que je pourrais faire de mal?

J'ai également pensé à créer une tâche planifiée dans le planificateur de tâches sur le serveur, mais en laissant la tâche désactivée. Quelqu'un a-t-il une idée du code C# pour qu'une application WMI lance cette tâche? Y aurait-il un moyen de discerner si la tâche/l'application a commencé à être terminée?

Répondre

0

Si votre chaîne de ligne de commande est OK, le nom du processus (Mexe.exe) doit apparaître dans la liste des processus dans le Gestionnaire des tâches Windows même s'il est invisible. J'ai également vu des informations que vous pouvez utiliser des tâches planifiées pour rendre le processus visible, mais jamais essayé. Une fois que vous avez confirmé que le processus est créé, vous pouvez essayer de créer une tâche planifiée et de l'exécuter à l'aide de Win32_Process.Start().

0

Vous avez peut-être créé 'Mexe.exe' en tant qu'application de console. Dans votre code, startInfo décrit une application Windows. essayez de faire le 'Mexe.exe' comme une application Windows. J'ai essayé votre code pour l'application de console et de fenêtres et cela a fonctionné pour l'application de fenêtres.

Et aussi vous pouvez le faire directement avec un seul exécutable sur le client. Pas besoin d'un exécutable serveur intermédiaire pour appeler 'Mexe.exe'. Est juste une suggestion pour améliorer la perfomance ..