2009-01-20 7 views
3

J'ai un site Web ASP.NET (en C#) qui prend en charge les données utilisateur, puis tente de créer une tâche planifiée Windows. Bien sûr, cela fonctionne très bien sur la machine DEV, mais ne fonctionne pas sur le serveur. J'essaie de comprendre quelles autorisations sont requises sur l'utilisateur ASPNET (ou utilisateur Web anonyme) pour créer des tâches..NET créer une tâche planifiée sur le serveur échoue avec E_ACCESSDENIED

L'erreur est:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
Stacktrace: 
    at MyScheduler.NewWorkItem(String TaskName, Guid& rclsid, Guid& riid, Object& obj) 
    at MyScheduler.CreateTask(String name) 

Je l'ai fait quelques recherches, et la résolution proposée est d'utiliser le web.config « usurper l'identité » drapeau pour forcer l'application à exécuter en tant qu'utilisateur disposant des autorisations suffisantes, par opposition au compte ASPNET qui peut ne pas avoir ces autorisations.

Exemple:

<system.web> 
    <identity impersonate="true" /> 
</system.web> 

Malheureusement, cela ne semble pas résoudre le problème. D'après la documentation que j'ai lue, cela devrait fonctionner en tant qu'utilisateur web anonyme, mais il semble que l'utilisateur n'ait pas assez d'autorisations.

J'ai modifié le paramètre pour spécifier un utilisateur de domaine spécifique qui se trouve être un administrateur sur la machine. Exemple:

<system.web> 
    <identity impersonate="true" userName="WindowsDomain\YourUserName" password="YourPassword" /> 
</system.web> 

Cela a permis à l'application de créer avec succès la tâche planifiée Windows. Donc, évidemment, avec le bon ensemble d'autorisations Windows 2003, je peux obtenir l'application à effectuer comme il le fait dans l'environnement de développement. Toutefois, je ne suis pas sur le point de placer les informations d'identification de l'utilisateur du compte réseau ou administrateur de l'ordinateur en texte brut dans un fichier Web.config.

Est-ce que quelqu'un sait quelles autorisations doivent être définies pour que le compte ASPNET se comporte comme il le souhaite?

EDIT: L'API Win32 est utilisée pour créer des tâches planifiées.

+0

Quelle méthode utilisez-vous pour créer les tâches planifiées? Win32, commande AT, commande SCHTASKS? – Kev

+0

Bon point! Nous utilisons l'API Win32. Je vais modifier cela dans la question. –

Répondre

1

J'ai été capable de résoudre mon problème particulier, mais pas complètement. Je n'ai pas encore identifié les droits exacts nécessaires pour créer et exécuter des tâches planifiées, mais ce qui suit semble fonctionner:

  1. Ajouter le <identity impersonate="true" /> à la Web.config
  2. Ajouter l'utilisateur IUSR (qui est à l'utilisateur l'application s'exécutera en utilisant impersonate) dans le groupe "Opérateurs de sauvegarde".

Cela permet à l'application d'accéder au dossier Tâches planifiées afin qu'elles puissent créer et exécuter la tâche.

Nous avons eu un problème supplémentaire, à savoir que les tâches tentaient de s'exécuter en tant que compte système local. Malheureusement, seuls les administrateurs semblent pouvoir affecter le compte système local en tant qu'utilisateur en cours d'exécution. Nous avons donc dû emprunter l'identité d'un compte administrateur et non d'un opérateur de sauvegarde pour que notre code fonctionne correctement.

0

Ecrivez-vous quelque chose à l'eventlog? Il est possible que votre composant (qui est hébergé dans IIS je présume?) N'a pas accès à l'écriture quelque chose dans le journal des événements.

C'est simplement une supposition ~ il y a quelque temps, je l'ai été confronté à un problème similaire, et je l'ai résolu de cette façon:

Click

1

Au lieu de se soucier de l'utilisateur ASPNET autorisations, votre processus interne vous permet-il de créer un compte spécifique à une machine et de fournir les informations d'identification?

+0

Je suis d'accord, la création d'un compte factice pour exécuter la tâche serait une option. Cependant, ce compte factice a toujours besoin des permissions correctes. À l'heure actuelle, je réalise que placer un utilisateur dans le groupe Administrateurs fonctionne, mais j'ai besoin de savoir quelles autorisations spécifiques sont requises pour un compte. –

-4

Une autre option est de flasher le BIOS sur le serveur

+0

Lien vers la source? – BigOmega

Questions connexes