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

Windows Serveur Discussion :

Exécution automatique d'un programme [WS 2008 R2]


Sujet :

Windows Serveur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Exécution automatique d'un programme
    Bonjour, j’ai développé une application en C# sous Visual Studio 2013.
    J’ai eu ensuite pour objectif d’automatiser son exécution grâce au planificateur de tâches, de manière à répéter l’action tous les jours à une heure définie.
    Autre info, j’ai développé mon application sur un ordinateur Windows 7, depuis lequel
    j’ai testé le planificateur de tâche. L’exécution a très bien fonctionné.
    Toutefois, pour la mise en production, mon application est hébergée sur un serveur virtuel fonctionnant sous Windows Server 2008 R2.
    Quand je lance l’application en cliquant dessus, jusque-là tout est ok.
    Mais quand c’est le planificateur de tâche, ça ne fonctionne pas.
    Par ailleurs, il m’affiche une exception 0xE0434352.
    J’ai fait plusieurs recherches, mais je ne sais toujours pas ce que m’indique ce code, car aucune explication ne semble correspondre à mon problème.
    Enfin, je suis allé consulter l’observateur d’évènements Windows, et voici ce qu’il m’a affiché pour l’exécution de mon application : (Cf ci-dessous )

    Sauf que je n’ai absolument rien compris au message, et rien ne semble correspondre à mon problème.
    Merci d’avance pour votre aide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Description :
    Application : WpfApplication2.exe
    Version du Framework : v4.0.30319
    Description : le processus a été arrêté en raison d'une exception non gérée.
    Informations sur l'exception : System.IO.DirectoryNotFoundException
       à System.IO.__Error.WinIOError(Int32, System.String)
       à System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)
       à System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)
       à System.IO.StreamReader..ctor(System.String, System.Text.Encoding, Boolean, Int32, Boolean)
       à System.IO.StreamReader..ctor(System.String, System.Text.Encoding)
       à System.IO.File.InternalReadAllLines(System.String, System.Text.Encoding)
       à System.IO.File.ReadAllLines(System.String, System.Text.Encoding)
       à WpfApplication2.MainWindow..ctor()
    
    Informations sur l'exception : System.Windows.Markup.XamlParseException
       à System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
       à System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
       à System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
       à System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext)
       à System.Windows.Application.LoadComponent(System.Uri, Boolean)
       à System.Windows.Application.DoStartup()
       à System.Windows.Application.<.ctor>b__1_0(System.Object)
       à System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
       à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
       à System.Windows.Threading.DispatcherOperation.InvokeImpl()
       à System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
       à System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
       à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
       à System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
       à MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
       à System.Windows.Threading.DispatcherOperation.Invoke()
       à System.Windows.Threading.Dispatcher.ProcessQueue()
       à System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
       à MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
       à MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
       à System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
       à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
       à System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
       à MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
       à MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
       à System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
       à System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
       à System.Windows.Application.RunDispatcher(System.Object)
       à System.Windows.Application.RunInternal(System.Windows.Window)
       à System.Windows.Application.Run(System.Windows.Window)
       à System.Windows.Application.Run()
       à WpfApplication2.App.Main()

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par mister-gaets Voir le message
    Sauf que je n’ai absolument rien compris au message, et rien ne semble correspondre à mon problème.
    Hé ben quoi, tu ne sais pas lire ?

    Tu me diras, avec toutes ces lignes soulignées (on se demande bien pourquoi -- le bouton "code" aurait été plus sympathique), c'est passablement imbuvable, cependant on y trouve ça :
    Citation Envoyé par mister-gaets Voir le message
    Description :
    Application : WpfApplication2.exe
    Version du Framework : v4.0.30319
    Description : le processus a été arrêté en raison d'une exception non gérée.
    Informations sur l'exception : System.IO.DirectoryNotFoundException
    à System.IO.__Error.WinIOError(Int32, System.String)
    Allez, cherche dans ton code, tu dois vouloir faire un accès à un dossier qui n'est pas là où tu le penses quand le programme est lancé par le planificateur, par opposition à un lancement par double-clic.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Je suis nouveau sur Developpez.net, et je ne sais pas encore intégrer du code (avec la coloration syntaxique et tout).
    J'ai lu le message en entier. Ce n'est pas exactement comme ça que j'aurais dû dire, mais
    que je n'ai pas trouvé la réponse à mon problème.
    Quant au chemin d'accès configuré dans le planificateur, j'ai bien vérifié que c'était le bon.
    Et pourtant, l'exécution n'a pas fonctionné.

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par mister-gaets Voir le message
    Je suis nouveau sur Developpez.net, et je ne sais pas encore intégrer du code (avec la coloration syntaxique et tout).
    Et pourtant c'est dans les règles, qu'on accepte à l'inscription, qu'on reconnaît avoir lues mais en fait c'est pas vrai, et voilà...
    Sinon, tu as pourtant su souligner toutes les lignes sélectionnées (avec le dernier bouton de la 3e ligne) ; ben pour le "code" c'est pareil sauf que c'est le dernier bouton de la 2e ligne.
    Et y a l'infobulle qui le confirme.

    Citation Envoyé par mister-gaets Voir le message
    Quant au chemin d'accès configuré dans le planificateur, j'ai bien vérifié que c'était le bon.
    Et pourtant, l'exécution n'a pas fonctionné.
    Parce que, comme je le disais (je vais répéter exactement la même chose), l'environnement d'exécution de ton programme n'est pas le même (en terme d'emplacement) selon que tu double-cliques dessus ou que c'est le planificateur qui le lance.

    Donc tu reprends ton code, et là où il y a des accès à des dossiers/fichiers tu fais logguer le chemin. Tu verras bien...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Ok, je vois.
    Je ferai des tests dès que j'aurai à nouveau la main dessus.

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    probablement que tu tente d'accéder à un des dossiers contenu dans le profil de l'utilisateur.

    Quand tu double clique sur ton exe, celui-ci est lancé dans le contexte de ton utilisateur et accède donc à tes dossiers.
    Quand tu lance depuis le planificateur de tache, celui-ci est exécuté par défaut dans le contexte d'un utilisateur spécifique, de mémoire, je crois que c'est System. Ce compte là ne possède pas tous les droits, et ne possède pas non plus une config complète, notamment des dossiers, au niveau du profil utilisateur.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour à tous, mon problème est résolu !
    En fait, il y a un détail dont je ne vous avais pas parlé, et je ne savais pas si le problème venait de là ou pas.
    Mon logiciel est censé lire un journal d'impressions généré en XML.
    Lorsque je faisais les tests, je renseignais seulement le nom du fichier (ex : events.xml).
    Mais pour que l'application soit exécutée par le planificateur de tâche, j'ai dû renseigner le chemin complet du fichier
    (celui-ci étant hébergé dans le serveur d'impression -> Y:\events.xml).
    Bon, quand j'exécutais le logiciel "à la main", tout se passait bien. Mais quand je demandais au planificateur de tâches de le faire, ça ne marchait pas. J'ai tout de suite compris qu'il y avait un problème de communication entre l'application C# et le journal XML.
    J'ai alors eu l'idée de faire une copie du journal dans le dossier qui contient toutes les sources de mon projet
    (en sachant que celui-ci est placé dans la racine C:\)
    En prenant soigneusement le temps de modifier mon code, et en réutilisant une nouvelle fois le planificateur de tâches,
    la récupération des impressions a fonctionné.
    Voilà d'où venait mes problèmes !

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

Discussions similaires

  1. Exécution automatique d'un programme
    Par Aide_sas dans le forum R
    Réponses: 4
    Dernier message: 22/06/2015, 14h27
  2. Réponses: 0
    Dernier message: 19/07/2011, 15h44
  3. Réponses: 0
    Dernier message: 06/04/2010, 23h14
  4. Réponses: 6
    Dernier message: 01/12/2008, 10h02
  5. Exécution automatique d'un programme
    Par guy_antoine_mav dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/08/2008, 13h47

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