Lancer un exe via un service Web [Résolu]

plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 09:29 - Dernière réponse : SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention
- 14 juin 2007 à 12:45
Bonjour,

j'ai développé un service web qui fonctionne bien, mais maintenant je voudrais que ce service lance un .exe automatiquement. Or j'ai essayé par exemple de lancer Word à partir de mon service web mais ça ne fonctionne pas; word apparait bien dans le gestionnaire de taches mais n'apparait pas à l'écran  
Pour tester que le code pour lancer Word fonctionnait, j'ai fait un petit projet (en graphique cette fois) avec le MEME code pour lancer Word, et là ça fonctionne: il n'y a donc qu'avec le service web que ça ne fonctionne pas.

PS : je sais qu'il y a déjà eu des posts à ce sujet mais ils ne répondent pas à mon problème.

Merci d'avance

Ci joint le code pour lancer word (qui fonctionne sauf quand on le met dans un service web) :

 ps =

new
Process();ps.StartInfo.FileName =

"winword.exe";
ps.StartInfo.CreateNoWindow true;ps.StartInfo.WindowStyle

ProcessWindowStyle.Normal;ps.Start();
Afficher la suite 

16 réponses

Répondre au sujet
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 12:33
+3
Utile
C'est bon j'ai trouvé. Comme tu le disais SharpMao, losrqu'un processus se lance, il se lance sous le nom "System" comme utilisateur et non pas sous le nom de l'utilisateur courant (nom de la session). Ainsi, tous les chemins d'accès aux fichiers sont à mettre en absolu car par exemple, par défaut, Word enregistre les fichiers dans "Mes documents". Mais là, l'utilisateur étant "System" je me demandais où pouvait bien etre rangé le fichier créé. Et apres avoir lancé une recherche, à ma grande surprise, le document était bien enregistré dans "Mes documents", mais pas dans "mes documents" de l'utilisateur courant (nom de la session ouverte) mais dans "mes documents" de System.
PS : je viens en meme temps de découvrir que sytem a, comme un vrai utilisateur, un bureau, un dossier "mes documents", etc...
Pour ceux que ça intéresse, voici le chemin pour accéder au dossier "Mes documents" de "System"

C:\WINDOWS\system32\config\systemprofile\Mes documents

Voili voila, merci beaucoup SharpMao pour ton aide précieuse 
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 09:51
0
Utile
Hello,

C'est tout à fait normal, puisque le processus qui contrôle ton service web n'est pas lancé par le même utilisateur que celui qui voit l'écran.
C'est comme lorsqu'un service windows lance un processus, personne ne peut le voir.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 09:57
0
Utile
Et y a t il une solution pour que le service lance un exe ?
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 10:01
0
Utile
Comme tu le vois dans le gestionnaire de tache, c'est qu'il est lancé, par contre, il n'interragit pas avec le bureau.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 10:06
0
Utile
A priori c'est plus compliqué que ça. En effet, pour testé j'ai essayé de lancer Word car je pensais que ce serait plus simple que de lancer une applciation (un .exe donc) que j'ai développé. J'ai aussi tenté de lancer le .exe que je veux réellement démarrer. Or ce .exe n'a pas à intéragir avec le bureau.
En effet ce .exe lance Word (en invisible), écrit dedans, enregistre le fichier, puis ferme Word. Il n'y a donc pas besoin d'intéraction avec le bureau, mais là encore ça ne fonctionne pas, ça n'enregistre pas le fichier Word...
Pourtant Word est bien dans les processus en fonctionnement...
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 10:11
0
Utile
As-tu vérifié que le service a le droit d'écrire des fichiers ?

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 10:28
0
Utile
J'ai tenté de préciser qui était l'utilisateur du service, pour forcer le service à fonctionner non pas sous système mais sous le nom d'utilisateur que je veux en faisant :


ps.StartInfo.UserName = "NomD'Utilisateur";

Mais c'est pire, le service ne lance plus du tout l'application (pas visble dans le gestionnaire des taches).

SharpMao, comment fait on pour vérifier que le service a le droit d'écrire des fichiers ?

Merci pour ton aide
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 10:50
0
Utile
Essaie de rajouter une méthode du genre de celle ci-dessous dans ton web service, et appel-la.

public

string WriteTest()
{
   try
   {

      System.
IO.
File.
WriteAllText(
@"C:\temp\Test.txt",
"Test");

      return "ok";
   }

   catch (
Exception ex)
   {

      return String.
Format(
"Exception Message : {0}{1}Exception StackTrace : {2}",

      ex.
Message,
Environment.
NewLine,
ex.
StackTrace);
   }
}

Tu verra bien si le fichier est créé. Tu peux changer le c:\temp par le chemin ou ton fichier devrait être enregistré.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 11:02
0
Utile
J'ai mis ton code, et le fichier test.txt a bien été créé donc le service possède bien les droits d'écriture. Remarque je ne sais pas si c'est indispensable que le service lui même ait les droits d'écriture puisque c'est en fait l'exe que j'appelle à partir du service qui écrit, et non pas le service directement. Bref, les droits d'écriture sont ok. Une autre idée
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 11:14
0
Utile
Oui, c'est indispensable, puisque ton exe est lancé avec le même utilisateur que le service, donc les mêmes droits.
Par contre, pour ton problème, je sèche un peu.

Par hasard, tu essaies de mettre le chemin complet du fichier word à enregistrer, et pas un chemin relatif.

Si ce n'est pas ça,... aucune idée

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 11:18
0
Utile
Encore plus étonnant : j'ai ajouté ton code dans mon exe que je veux lancer. Je pensais que ça ne fonctionnerait pas, mais SI ça fonctionne ! Donc apparement le service démarre bien l'éxecutable, et veux bien écrire un fichier texte, mais ça ne fonctionne pas si je veux que ce fichier texte soit écrit  à partir de Word...
Je pense donc que c'est le fait que mon exe demande à Word de s'ouvrir (pour écrire le fichier) qui fait que ça ne fonctionne pas :-(
Je ne sais plus quoi faire...

PS : je suis obligé d'écrire le fichier à partir de Word pour mon projet
Commenter la réponse de plop3000
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 11:21
0
Utile
Désolé SharpMao je n'avais pas vu ton post. C'est bien le chemin complet qui est dans le code.
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 11:27
0
Utile
Est-ce que tu pourrais lancer directement word depuis le service au lieu de le lancer depuis un autre exe

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 11:28
0
Utile
Mets également ton qui travaille avec Word dans un try...catch, et s'il y a une exception log-la dans un fichier ou l'eventlog.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
plop3000 135 Messages postés mercredi 23 mai 2007Date d'inscription 7 avril 2012 Dernière intervention - 14 juin 2007 à 11:39
0
Utile
J'ai fait ce que tu as dis, j'ai mis tout le traitement qui est fait dans l'exe dans un try catch, et une exception est bien lancé (bien joué SharpMao, je n'y avais pas pensé). L'exception est la suivante :

System.Runtime.InteropServices.COMException (0x800A141F): Word n'a pas pu lire ce document. Il est peut-être corrompu.
Essayez l'une ou plusieurs des opérations suivantes :
* Ouvrez et réparez le fichier.
* Ouvrez le fichier avec le convertisseur Récupération de texte.
   à Microsoft.Office.Interop.Word.Documents.Add(Object& Template, Object& NewTemplate, Object& DocumentType, Object& Visible)
   à BonjourWord.Form1.Form1_Load(Object sender, EventArgs e) dans C:\.... ligne 41.

Pour ta première question, non je ne peux pas lancer Word directement dans le service.

Je vais essayer de voir d'où vient cette exception et je vous tiens au courant

Merci 
Commenter la réponse de plop3000
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 14 juin 2007 à 12:45
0
Utile
N'oublie pas de valider au moins une réponse, même si c'est la tienne, pour que les autres sachent que ce problème est résolu.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.