Ich habe eine ungewöhnliche Situation, in der ich einen SharePoint-Timer-Job sowohl lokale Administrator Windows-Berechtigungen und SHAREPOINT\System
SharePoint-Berechtigungen benötigen.Sharepoint: Ausführen von Stsadm von einem Timer-Job + SHAREPOINT Systemrechte
Ich kann die Windows-Berechtigungen erhalten, indem ich einfach den Timer-Dienst für die Verwendung eines Kontos konfigurieren, das ein Mitglied der lokalen Administratoren ist. Ich verstehe, dass dies keine gute Lösung ist, da es dem SharePoint-Zeitdienst mehr Rechte gibt, als er eigentlich haben sollte. Aber es lässt zumindest zu, dass mein SharePoint-Zeitgeberauftrag stsadm
ausgeführt wird.
Ein weiteres Problem beim Ausführen des Timer-Diensts unter lokalen Administrator ist, dass dieser Benutzer nicht unbedingt SHAREPOINT\System
SharePoint-Berechtigungen, die ich auch für diesen SharePoint-Job benötigen. Es stellt sich heraus, dass SPSecurity.RunWithElevatedPrivileges
in diesem Fall nicht funktioniert. Reflektor zeigt, dass RunWithElevatedPrivileges
überprüft, ob der aktuelle Prozess owstimer
ist (der Service-Prozess, der SharePoint-Jobs ausführt) und führt keine Erhöhung ist dies der Fall (die rationale hier, ich denke, ist, dass der Timer-Dienst unter NT AUTHORITY\NetworkService
Windows-Konto ausgeführt werden soll Das hat SHAREPOINT\System
SharePoint-Berechtigungen, und daher müssen die Berechtigungen für einen Zeitgeberauftrag nicht erhöht werden).
Die einzige mögliche Lösung scheint hier zu sein, den Zeitgeberdienst unter seinem üblichen NetworkService-Windows-Konto auszuführen und stsadm als lokalen Administrator auszuführen, indem die Administratoranmeldeinformationen irgendwo gespeichert und an System.Diagnostics.Process.Run() übergeben werden. durch den Benutzernamen, die Domain und das Passwort von StarInfo.
Es scheint alles sollte jetzt funktionieren, aber hier ist ein anderes Problem, mit dem ich im Moment festhalte. Stsamd versagt mit dem folgenden Fehler Popup (Winternals filemon zeigt, dass stsadm wird in diesem Fall unter dem Administrator ausgeführt wird) (!):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
Ereignisanzeige registriert nichts außer dem Popup.
Der lokale Administrator Benutzer ist mein Konto und wenn ich gerade stsadm
interaktiv unter diesem Konto ausführen, ist alles in Ordnung. Es funktioniert auch gut, wenn ich den Timer-Dienst für die Ausführung unter diesem Konto konfiguriere.
Alle Vorschläge sind willkommen :)