web-dev-qa-db-fra.com

Besoin d'exécuter * .exe sur le serveur depuis ASP.net

Ma situation actuelle est que je dois exécuter un exe (qui crée un fichier .txt local) dans un serveur distant avec IIS hébergeant une API ASP.net/C#. J'ai créé un utilisateur local (disons userA) en tant qu'administrateur pour exécuter le service Web sur le serveur distant mais le fichier .txt n'a pas été créé. J'ai déjà vérifié et accordé les autorisations de dossier nécessaires à userA et ajouté l'utilisateur dans divers groupes. Ce qui est drôle, c'est que si je suis connecté en tant qu'utilisateur A dans le système distant, l'exe est exécuté comme prévu. Si je me déconnecte, il échoue. Le serveur est Win server 2008 avec IIS 7. Toute aide serait appréciée merci.

MISE À JOUR: J'ai résolu le problème et publié la réponse et quelques liens vers des problèmes connexes ici sur SO. En bref, je devais définir "charger le profil utilisateur" sur IIS pool d'applications.

Merci à tous pour leur contribution

16
santhosh.v

MISE À JOUR: J'ai réussi à résoudre le problème après plusieurs semaines. Merci à tous pour votre contribution. Apparemment IIS ne charge pas les profils utilisateur Windows par défaut. Ainsi, lors de l'exécution en tant qu'utilisateur différent qui n'est pas connecté, leur profil Windows doit être chargé par IIS. Dans le menu de paramètres avancés de votre pool d'applications , il y a une option "charger le profil Windows" Je viens de changer cela en vrai. Dans les versions précédentes d'IIS, il était défini sur "vrai" par défaut.

Questions connexes sur SO avec la même solution:

1) Exceptions de sécurité dans ASP.NET et option Charger le profil utilisateur dans IIS 7.5

2) L'exécution d'un projet d'application web asp.net sur IIS7 lève une exception

3) exception System.Web.AspNetHostingPermission sur un nouveau déploiement

Un autre 4) http://geekswithblogs.net/ProjectLawson/archive/2009/05/05/iis-system.web.aspnethostingpermission-exception-on-windows-7-rc.aspx

12
santhosh.v

Vous pouvez utiliser Process.Start

Process process = new Process();
process.StartInfo.FileName = "CVS.exe";
process.StartInfo.Arguments = "if any";
process.Start();

Il existe également un article sur l'exécution de processus en tant qu'autre utilisateur sur asp.net:

http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx

Fourniture des informations d'identification de l'utilisateur

En bref, il dit que vous devez rediriger le processus, avec un code comme celui-ci:

ProcessStartInfo info = new ProcessStartInfo("cmd.exe");

info.UseShellExecute = false;

info.RedirectStandardInput = true;

info.RedirectStandardError = true;

info.RedirectStandardOutput = true;

info.UserName = dialog.User; // see the link mentioned at the top

info.Password = dialog.Password;

using (Process install = Process.Start(info))

{

      string output = install.StandardOutput.ReadToEnd();

      install.WaitForExit();

      // Do something with you output data

      Console.WriteLine(output);

}
7
user1182183