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

Services Web Discussion :

[C#] Problème d'exécution d'une appli console dans un Webservice


Sujet :

Services Web

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 53
    Points
    53
    Par défaut [C#] Problème d'exécution d'une appli console dans un Webservice
    Bonjour à tous,

    J'ai un petit problème pour exécuter une application console à partir d'une web-méthode.
    Cet exe, à terme, va générer des fichiers très spécifique faisant appel à diverses dlls.

    Pour le moment l'exe est limité à ça plus simple expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [STAThread]
    static void Main(string[] args) 
    {
          Thread.Sleep(10000);
    }
    J'essaie de lancer l'exe avec Process.Start()
    L'exe se lance bien avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ProcessStartInfo _iStartInfo = new ProcessStartInfo();
    _iStartInfo.FileName = _iGeneratorExePath;
    _iStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    _iStartInfo.Arguments = _pParamExe;
     
    Process _iProcess = Process.Start(_iStartInfo);
    Mais la génération ne fonctionne pas à cause de droit spécifique (une dll ne se charge pas)

    L'exe ne se lance pas avec ces différentes méthodes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ProcessStartInfo _iStartInfo = new ProcessStartInfo();
    _iStartInfo.FileName = _iGeneratorExePath;
    _iStartInfo.WorkingDirectory = System.Web.HttpContext.Current.Request.PhysicalApplicationPath;
    _iStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    _iStartInfo.Password = _iPassword;
    _iStartInfo.UserName = @"********";
    _iStartInfo.Domain = @"*******";
    _iStartInfo.Arguments = _pParamExe;
    _iStartInfo.Verb = "runas";
    _iStartInfo.UseShellExecute = false;
    _iStartInfo.RedirectStandardError = true;
     
    Process _iProcess = Process.Start(_iStartInfo);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ProcessStartInfo _iStartInfo = new ProcessStartInfo();
    _iStartInfo.FileName = _iGeneratorExePath;
    _iStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    _iStartInfo.Arguments = _pParamExe;
    _iStartInfo.Verb = "runas";
     
    Process _iProcess = Process.Start(_iStartInfo);
    j'ai essayé plein de chose, j'ai ajouté les droits au dossier pour le pool du webservice, j'ai lu ce ticket :http://www.developpez.net/forums/d97...on-webservice/

    mais les réponse ne m'ont pas apporté beaucoup plus.

    Du coup je suis bloqué et je ne sais plus quoi faire.

    avez-vous des idées ?
    Avez-vous des questions ?

    PS: en mode débug dans VS2010 aucun problème d'exécution.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Comment t'as su qu'il y a des dll qui ne se chargent pas ? Peut-on avoir le message d'erreur complet s'il y en a une ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Oui, juste le temps de remettre le tout dans le service et je te donne le message.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    bon j'ai pas retrouvé l'erreur sur la DLL mais j'ai un doute sur le fait que j'ai peux être déjà corriger ce soucis, cependant en intégrant le code dans le service je tombe sur cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.InvalidOperationException: DragDrop registration did not succeed
    La génération des fichiers prends du temps, c'est une application cliente silverlight qui appelle le service, et pendant la génération des fichiers l'utilisateur ne doit pas pouvoir faire autre chose.
    L'idée avec l'exe était de créer un fichier de retour permettant de suivre la progression de la génération.

    J'attends vos avis/aide sur ce problème

    merci

    edit: le problème de dll non chargé venait de l'exe, et j'ai corrigé le soucis en créant un installer pour l'exe. Et du coup les dépendances ont été ajouté.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    En général, les services web ne lancent pas d'exécutable. C'est une pratique que je déconseille surtout pour des raisons de sécurité et de droits.

    Par contre, votre idée peut être réutilisée autrement :
    - il suffirait de convertir votre "EXE" en un service qui tourne en permanence (pas forcément un service Windows mais simplement l'application reste active),
    - cette application pourrait alors scruter un répertoire pour vérifier s'il y a une nouveau fichier,
    - dès l'arrivée d'un fichier, elle pourrait lancer un traitement et déposer le résultat ailleurs (un autre répertoire par exemple).

    Une autre solution serait d'utiliser une petite base de données pour échanger les informations, cela éviterait les problèmes de droits et vous permettrait de travailler plus tard sur plusieurs machines séparées (archi plus évolutive).

    A votre disposition pour en parler,
    Pascal
    Découvrez DotnetDojo, pour booster vos compétences de développeur

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Oui je comprends cependant les contraintes font que la base données ne doit pas être utiliser pour ce module.

    De plus cet exe est celui qui génère les fichiers en recevant à l'exécution des paramètre d'entré.

    J'ai trouver une solution de bidouillage avec le Impersonate mais cela ne me plais pas, et niveau sécurité c'est loin d'être optimale.
    Je vais essayer de voir avec le service réseaux pour créer un compte spécifique que je mettrais sur le IIS afin qu'il ai les droits nécessaire pour cet exe seulement.

    Je vous tiens au courant

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/05/2011, 22h30
  2. Problème exécution d'une appli win32 XP-Seven
    Par bibbi dans le forum Windows
    Réponses: 6
    Dernier message: 31/01/2011, 12h48
  3. Problème en exécution d'une application console.
    Par insane_80 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/02/2007, 17h52
  4. Réponses: 1
    Dernier message: 31/07/2006, 13h54
  5. Réponses: 4
    Dernier message: 02/06/2006, 16h30

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