J'ai une situation inhabituelle dans laquelle j'ai besoin d'un travail de minuteur SharePoint pour avoir des privilèges d'administrateur local et avoir des privilèges SharePoint SHAREPOINT\System
.Sharepoint: exécution de stsadm à partir d'un travail de minuteur + SHAREPOINT Droits système
Je peux obtenir les privilèges de Windows en configurant simplement le service de minuterie pour utiliser un compte qui est membre des administrateurs locaux. Je comprends que ce n'est pas une bonne solution car cela donne au service de minuterie SharePoint plus de droits que ce qu'il est censé avoir. Mais cela permet au moins à mon travail de minuteur SharePoint de s'exécuter stsadm
.
Un autre problème lié à l'exécution du service de minuteur sous un administrateur local est que cet utilisateur n'aura pas nécessairement les privilèges SHAREPOINT\System
SharePoint dont j'ai également besoin pour ce travail SharePoint. Il s'avère que SPSecurity.RunWithElevatedPrivileges
ne fonctionnera pas dans ce cas. Le réflecteur montre que RunWithElevatedPrivileges
vérifie si le processus en cours est owstimer
(le processus de service qui exécute les travaux SharePoint) et n'effectue aucune élévation c'est le cas (le rationnel ici, je suppose, est que le service de minuterie est censé fonctionner sous le compte Windows NT AUTHORITY\NetworkService
qui a SHAREPOINT\System
privilèges SharePoint, et donc il n'est pas nécessaire d'élever les privilèges pour un travail du minuteur). La seule solution possible ici semble être d'exécuter le service de minuteur sous son compte habituel NetworkService Windows et d'exécuter stsadm en tant qu'administrateur local en stockant les informations d'identification de l'administrateur quelque part et en les passant à System.Diagnostics.Process.Run() par le nom d'utilisateur, le domaine et le mot de passe de StarInfo.
Il semble que tout devrait fonctionner maintenant, mais voici un autre problème que je suis coincé pour le moment. Stsamd échoue avec la fenêtre d'erreur suivant (Winternals filemon montre que stsadm est en cours d'exécution sous l'administrateur dans ce cas) (!):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
Observateur d'événements enregistre rien, sauf la fenêtre contextuelle.
L'utilisateur administrateur local est mon compte et quand je viens d'exécuter stsadm
interactivement sous ce compte tout est ok. Cela fonctionne également très bien lorsque je configure le service de minuteur pour qu'il fonctionne avec ce compte.
Toutes les suggestions sont appréciés :)