J'ai une situation inhabituelle dans laquelle j'ai besoin d'un travail du minuteur SharePoint pour avoir à la fois des privilèges d'administrateur Windows locaux et pour avoir SHAREPOINTSystem
privilèges SharePoint.
Je peux obtenir les privilèges Windows en configurant simplement le service de minuterie pour utiliser un compte 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 qu'il n'est censé avoir. Mais cela permet au moins à mon travail de minuteur SharePoint d'exécuter stsadm
.
Un autre problème avec l'exécution du service de minuterie sous l'administrateur local est que cet utilisateur n'aura pas nécessairement les privilèges SHAREPOINTSystem
SharePoint dont j'ai également besoin pour ce travail SharePoint. Il s'avère que SPSecurity.RunWithElevatedPrivileges
ne fonctionnera pas dans ce cas. Reflector montre que RunWithElevatedPrivileges
vérifie si le processus actuel est owstimer
(le processus de service qui exécute les tâches SharePoint) et n'effectue aucune élévation, c'est le cas (le rationnel ici, je suppose, est que le service de minuterie est censé s'exécuter sous un compte Windows NT AUTHORITYNetworkService
qui dispose de SHAREPOINTSystem
privilèges SharePoint, et qu'il n'est donc pas nécessaire d'élever les privilèges pour un travail de minuterie). p>
La seule solution possible ici semble être d'exécuter le service de minuterie sous son compte Windows NetworkService habituel et d'exécuter stsadm en tant qu'administrateur local en stockant les informations d'identification de l'administrateur quelque part et en les transmettant à System.Diagnostics.Process.Run() via 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 avec lequel je suis bloqué en ce moment. Stsamd échoue avec la fenêtre contextuelle d'erreur suivante (!) (Winternals filemon montre que stsadm s'exécute sous l'administrateur dans ce cas) :
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
L'Observateur d'événements n'enregistre rien sauf la fenêtre contextuelle.
L'utilisateur administrateur local est mon compte et lorsque je lance stsadm
de manière interactive sous ce compte, tout va bien. Cela fonctionne également très bien lorsque je configure le service de minuterie pour qu'il s'exécute sous ce compte.
Toute suggestion est appréciée :)