IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#] Process.Start Access Denied


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut [C#] Process.Start Access Denied
    Bonjour à tous !

    Après quelques heures de recherches sur Google, d'errance et de désespoir, je me tourne vers vous.

    Dans le cadre de mon stage, je dois implanter un redémarrage du serveur à distance, à l'aide d'un fichier bat (shutdown -r -f -m \\nomduserveur) qui fonctionne bien.

    Cette opération se réalise lorsque je clique sur un bouton sur une page ASP hébergée sur le serveur (Windows 2008 R2). Le fichier est bien trouvé, mais il ne s'exécute pas.
    Visiblement, il lui faut des droits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string batpath = "chemindufichier/reboot.bat";
    Process process = new Process();
    process.StartInfo.FileName = batpath;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.UserName = "username";
    process.StartInfo.Password = ConvertIntoSecureString("password");
    process.StartInfo.UseShellExecute = false;
    process.Start();
    Une erreur apparaît au process.Start() :
    System.ComponentModel.Win32Exception: Access is denied alors que le user utilisé est admin.
    J'ai également testé les ProcessStartInfo, mais rien n'y fait.

    J'ai lu énormément de choses sur le net, mais rien pour ce cas-ci.

    Comment faire pour que le process s'exécute comme si un admin le lançait ?

    Un tout grand merci d'avance pour votre aide et votre patience,

    shini86161.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Par défaut
    Salut,

    le probleme ne vient il pas de ton chemin ?

    tu utilise dans ta chaine des / à la place des \

    et écris plutot ta déclaration comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string batpath = @"chemindufichier\reboot.bat";
    L'@ devant une chaine te permet d'annuler l'interprétation du \

    Ca t'évite d'écrire string s = "chemindufichier\\reboot.bat";

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Merci tR4x pour ta réponse.

    Non, il ne s'agit pas de ça, l'erreur aurait été différente, et j'ai modifié le code présenté. Mon véritable chemin est correct, et est référencé dans un fichier XML.

    Mon problème réside dans l'octroi de droits : le serveur ne veut pas exécuter le fichier batch car le compte ASP qui l'exécute ne possède pas les droits suffisants. J'ai donc essayer d'ajouter un username et un password admin dans le StartInfo du Process, sans résultat.

    Je me dirige vers "l'impersonation" mais je ne sais pas trop où je vais avec ça.

    On m'a parlé de Network Credential avec Session, mais j'ai rien compris.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    Après quelques heures supplémentaires à m'arracher les cheveux, je n'ai pas avancé d'un pouce.

    Comme mon site fonctionne sur authentification Windows (suivant le user qui se connecte dessus, certains onglets sont affichés, d'autres pas), l'option impersonate=true dans le fichier web.config ne peut être alloué.

    J'ai testé cette façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WindowsImpersonationContext impersonationContext = ((WindowsIdentity)User.Identity).Impersonate();
    Process process = new Process();
    process.StartInfo.FileName = batpath;
    if (process.Start())
          lblCancel.Text = "Le serveur va redémarrer. Vous avez 30 secondes pour annuler cette opération.";
           lblCancel.Visible = true;
           process.Close();
    }
    impersonationContext.Undo();
    Sans succès.

    De ce que j'ai compris, le compte ASPNET de Visual Studio (avec lequel le reboot fonctionne) aurait plus de droits que celui de IIS, mais je ne comprends pas comment, ni pourquoi.

    En vous remerciant encore pour votre aide.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 58
    Par défaut
    J'ai enfin trouvé la solution à mon problème.

    Comme la solution doit être appliquée à autre serveur, j'ai rédigé la solution.
    Et pour tous ceux qui auront le même problème et qui tomberont sur ce topic, voici ma solution, en pdf.

    En bref, l'utilisateur par défaut d'IIS 7 (NETWORK SERVICE) ne dispose pas des droits suffisants pour exécuter la commande SHUTDOWN (ceci est visible dans Adlinistrative Tools > Local Security Policy > Local Policies> Shut down the system).

    J'ai donc créer un user avec les bons droits, et assigné cet user à la place de Network Service au bon pool.

    Tadaaaaaa !
    Images attachées Images attachées

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2013] SoapException: Server was unable to process request.--> Access is denied
    Par Aquellito dans le forum SharePoint
    Réponses: 6
    Dernier message: 23/06/2014, 10h26
  2. Process Access Denied
    Par NicoMaya dans le forum Général Python
    Réponses: 2
    Dernier message: 26/08/2011, 16h54
  3. [Applet][Security] Access Denied
    Par medba dans le forum Applets
    Réponses: 3
    Dernier message: 23/09/2005, 14h40
  4. access denied
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 08h26
  5. Access denied..... Help !
    Par chakan dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/12/2003, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo