Exécuter le fichier exe sur la machine distante
Je suis en train de l'exécuter notepad.exe sur une machine distante, mais il n'est pas d'aujourd'hui. Ce qui me manque?
var ui = new ImpersonateUser();
//the process to restart
const string processName = "notepad.exe";
var serverName = "serverName";
try
{
//Use adbadmin for access
ui.Impersonate(_domain, _userName, _pass);
//Start the process
ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
info.FileName = @"C:\PsTools\psexec.exe";
info.Arguments = @"""\\" + serverName + @"C:\WINDOWS\notepad.exe""";
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
lblStatusResponse.Text = "Service " + processName + " was restarted correctly.";
}
catch (Exception ex)
{
lblStatusResponse.Text = ex.ToString();
}
finally
{
ui.Undo();
}
Cela me donne pas une exception, mais je suis sûrement raté quelque chose...
Est le "serveur" de démarrage du service sur la machine distante?
pour une chose, vous avez besoin d'un espace avant le C:\..
Quoi tu veux dire avec service de serveur?
Où? Sur chacun d'eux?
non, juste ici:
pour une chose, vous avez besoin d'un espace avant le C:\..
Quoi tu veux dire avec service de serveur?
Où? Sur chacun d'eux?
non, juste ici:
info.Arguments = @"""\\" + serverName + @" C:\WINDOWS\notepad.exe""";
OriginalL'auteur MrProgram | 2014-09-11
Vous devez vous connecter pour publier un commentaire.
La réponse est une combinaison de vos réponses. Mais l'ensemble de la solution correcte était:
OriginalL'auteur MrProgram
L'exécution d'un programme interactif comme notepad.exe n'est pas toujours ouvrir une fenêtre visible sur le PC cible. Essayez d'ouvrir le Gestionnaire des Tâches sur l'ordinateur cible lorsque vous exécutez le code et voir si notepad.exe apparaît dans la liste des processus en cours d'exécution.
Je te suggère d'essayer d'exécuter psexec à partir de la ligne de commande avant d'essayer de l'appeler via le code.
Vous pouvez également utiliser le "interactif" drapeau de sorte qu'il peut interagir avec le bureau sur la cible.
Avez-vous recevez un message d'erreur lors de l'exécution sur la ligne de cmd? Sont à la fois la source et la cible du PC connecté sur le même domaine? Si oui, le compte qui exécute le psexec de commande ont les autorisations sur le PC cible? Essayez d'ajouter le compte au groupe admin local sur le poste de travail cible.
Un autre test que vous pouvez faire est d'essayer de tenter de mapper un lecteur réseau à partir de la source PC à l'ordinateur cible. Essayez d'exécuter les opérations suivantes à partir de la ligne de commande. net use \\serverName\c$
Pas d'erreurs. Hmm...Le domaine est le même. Les autorisations sont correctes ainsi
Essayez de vérifier si les ports 135 et 445 sont ouverts sur les serveurs cible de pare-feu.
OriginalL'auteur Peter Evans
Votre chemin UNC n'a pas l'air bon.
Après la concaténation de chaîne, il ressemblera à quelque chose comme
Essayer de l'imprimer. Voir la documentation sur UNC sur MSDN, et quelques exemples ici (ou google sur le Chemin d'accès UNC)
Si vous avez uniquement la valeur par défaut des actions, il doit être quelque chose comme
OU psexec vous permettent d'utiliser une autre notation, mais vous devez être prudent avec les guillemets, il y
Aussi, s'assurer que le service de "Serveur" est en cours d'exécution sur la machine cible.
Le partage Admin$ est créé et géré par le service de "Serveur", si vous en avez besoin en cours d'exécution pour psexec de travail (http://windowsitpro.com/systems-management/psexec).
Vous devriez aussi essayer de l'utiliser sur la ligne de commande, d'abord. Puis, quand il fonctionne, l'incorporer dans votre programme C#. Il est plus facile de cette façon...
Hmm ok..Psexec est sur le serveur, de sorte que ne devrait pas être un problème. Mais la ligne de commande, je ne suis pas sûr de
psexec s'exécute sur votre machine. Il "tire" d'un service (intégré dans ses propres ressources), la copie du serveur ou de la "cible" de la machine, et la démarre. La copie se passe en utilisant le partage Admin$; c'est pourquoi "Serveur" doit être démarré (automatiquement ou manuellement)
Je l'ai déjà travaillé. Avec @"\\" + serverName + @" -je C:\WINDOWS\notepad.exe";
OriginalL'auteur Lorenzo Dematté
Juste d'offrir une version actuelle de la réponse.
Il pourrait y avoir un problème d'exécution
psexec
en raison d'OS de la politique, pour activer le contrôle à distance, vous devez modifier le registre:Vous pouvez le vérifier: À distance de contrôle de compte d'utilisateur LocalAccountTokenFilterPolicy
OriginalL'auteur Alexey