2010-04-09 4 views
2

J'apprécierais énormément de l'aide sur celui-ci! Cela peut être difficile. :)L'application VB6 ne s'exécute pas en tant que tâche planifiée sauf si l'utilisateur est connecté

Problème

  • J'ai une application VB6 qui est configuré comme tâche planifiée. Il démarre à chaque fois, mais lors de l'exécution de CreateObject(), il échoue si un utilisateur n'est pas connecté à l'ordinateur.
  • Je cherche des informations sur ce qui pourrait causer cela. Mon principal soupçon est que certaines API Windows échouent.

Points clés

  • Comportement confirmé sur Windows 2000, 2003, 2008 et Vista.
  • L'application s'exécute en tant qu'utilisateur X à l'heure planifiée, exécutée par le planificateur de tâches Windows.
  • Il s'exécute à chaque fois. L'application commence!
    • Si l'utilisateur X est connecté via RDP, il fonctionne parfaitement. (Notez que l'utilisateur n'a pas besoin d'être connecté, uniquement connecté)
    • Si l'utilisateur X n'est pas connecté à l'ordinateur, l'application échoue.

non point de

  • application échoue lors de l'utilisation CreateObject() pour instancier un objet DCOM qui fait également partie de la demande.
  • Les objets DCOM déclarent des références .dll au démarrage (globalement/au-dessus du fichier .bas) et exécutent une petite fonction de démarrage. L'échec doit être au démarrage, éventuellement dans l'une des déclarations .dll.

Pensées

Après quelques recherches sur Google mes soupçons ont été orientées vers MAPI. D'après ce que j'ai pu voir, MAPI a demandé à l'utilisateur d'être connecté. L'application a des références MAPI. Mais même avec toutes les références MAPI supprimées, cela ne fonctionne toujours pas.

Quelle est la différence si un utilisateur est connecté? Cartographie du registre? Environnement? Explorer.exe est en cours d'exécution.

L'utilisateur n'est pas connecté lorsque l'application s'exécute en tant qu'utilisateur?

Quelle information aiderait?

  • Une réponse définitive serait vraiment géniale.
  • Toute information concernant une fonctionnalité VB6/API Windows qui pourrait agir différemment selon que l'utilisateur est connecté ou non aiderait définitivement.
  • Des expériences similaires peuvent me mener dans la bonne direction.
  • Astuces pour le débogage.
+0

Avec quelle (s) erreur (s) l'application at-elle échoué? Des conseils dans le journal des événements ou lors de l'utilisation de Debug View (http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx)? Notez qu'un processus s'exécutant en tant que tâche planifiée s'exécute dans un environnement non-interactif où des choses comme essayer d'afficher une fenêtre peuvent entraîner un comportement inattendu. –

Répondre

0

Nous n'avons jamais découvert ce qui a causé cela. Au lieu de cela j'ai fait un client RDP que j'ai mis dans les tâches planifiées. Il s'est connecté sur un utilisateur qui avait l'application requise au démarrage. Après un certain temps, le client RDP s'est déconnecté avec force de l'utilisateur (pour empêcher les applications en fuite de suspendre le système).

Pas la solution parfaite, mais une solution néanmoins.

1

L'application VB doit éventuellement être utilisée pour exécuter des services qui s'exécutent uniquement lorsqu'un utilisateur est connecté.

+0

Dans le même ordre d'idée, le composant DCOM lui-même doit peut-être utiliser des services qui ne sont disponibles que lorsque l'utilisateur exécutant exécute une session interactive. –

1

Qu'est-ce que le paramètre "Identity" du composant DCOM.

C: \ WINDOWS \ system32 \ Com \ comexp.msc

  1. C: \ WINDOWS \ system32 \ Com \ comexp.msc
  2. Component Services
  3. Poste
  4. Config
  5. DCOM
  6. L'objet DCOM, clic droit propriétés
  7. identité onglet

Set à « cet utilisateur » et définir un utilisateur avec les autorisations requises, puis exécutez l'application en tant que votre auto pour voir si le composant DCOM peut encore fonctionner, puis essayez à nouveau du programmateur.

0

a vos formulaires VB6?
parce que lorsque vous exécutez planifié, il s'exécute "en tant que service", donc il ne peut pas avoir de formulaires, ou s'il a un environnement dans lequel les montrer. Je ne me souviens pas de ce que j'ai utilisé, mais existe générique "run as a service" exe de convertisseur pour exécuter des projets VB6 fenêtrés.

Aussi peut-être vous pouvez facilement convertir votre code pour s'exécuter comme un VBScript, et le planifier.

Questions connexes