SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Problem mit Sharepoint Tool beim Öffnen einer Site mit SPWeb.OpenWeb()

Unbeantwortet Dieser Beitrag hat 7 Antworten

Ohne Rang
4 Beiträge
Armin Braunstein erstellt 24 Sept. 2010 13:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo!

Ich arbeite in einem Softwareunternehmen, und wir bauen für einen Kunden von uns eine Schnittstelle von einem CRM-System zum Sharepoint, dh. Upload von Dokumenten inkl. anlegen von zusätzlichen Attributen (Fields) zur Beschreibung der Dokumente.

Jetzt habe ich, um die benötigten Felder im Voraus anzulegen, eine kleine EXE-Datei geschrieben, die über das Sharepoint Object Model alle DocumentLibrarys rekursiv durchläuft, um vorab die benötigten Felder anzulegen.

Das funktioniert alles einwandfrei auf meiner 64bit Entwicklungsumgebung (Windows 2008 Server 64bit, Visual Studio 2010).
Allerdings, wenn ich dieses Tool am Kundensystem laufen lasse, welches ebenfalls ein Windows 2008 Server 64 bit System ist, kommt sofort beim Aufruf der "site.OpenWeb()"-Methode eine "FileNotFoundException":

Sharepoint-Site http://localhost/Documentarchive/MCI/default.aspx
- rekursiv -
An error occurred!!
System.IO.FileNotFoundException: The Web application at
http://localhost/Documen
tarchive/MCI/default.aspx could not be found. Verify that you have typed the URL
 correctly. If the URL should be serving existing content, the system administra
tor may need to add a new request URL mapping to the intended application.

   at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean con
textSite, SPUserToken userToken)
   at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
   at AOSPSFieldAdder.Program.Main(String[] args) in C:\Projekte\AOSpsFieldAdder
\Program.cs:line 155

Die Zeilen 154 und 155 sehen folgendermaßen aus:

SPSite site = new SPSite(sSiteUrl);
SPWeb web = site.OpenWeb();

Ich kann mir nicht erklären, warum es auf meiner Entwicklungsumgebung funktioniert und auf dem Kundensystem nicht. Der User mit dem ich die EXE starte (am Kundensystem) ist laut Kundeinformation angeblich der Sharepoint-Admin-User, der bei der Installation angegeben wurde. Ich kann mit diesem User auch ohne Probleme über den Internet Explorer auf die betreffende Url zugreifen und habe dort auch alle Rechte, Felder zu ändern, zu löschen oder hinzuzufügen und kann sogar ganze DocumentLibrarys anlegen und löschen, usw.

Woran könnte es liegen, daß es mit der EXE nicht funktioniert? Habe im Internet gefunden, daß es für ein x64-System compiliert sein muß, was ich auch schon versucht habe und zum selben Ergebnis kam

Wenn ich die EXE mit "Run as administrator" aufrufe, kommt das Programm über den OpenWeb()-Aufruf, scheitert dann aber beim Anlegen der Fields:

Starte Update
Sharepoint-Site http://localhost/Documentarchive/MCI/default.aspx
- rekursiv -
-----------------------------
SITE MCI
Updating list Documents..
  CRMID, D3Stat. No., D3Ser No., D3Link Type, D3Text, D1Doc No. 1, D1Doc No. 2,
D1Type, D1Date, D1Document, D1Keyword, D1Length, D1MIME type, D1Comment, D1Creat
ed by ID, D1Creation date, D1Created at, D1Modified by ID, D1Modified by, D1Last
 modify date, D1Updated at, D3ID_FI, D3Company, D3ID_KP, D3Person, D3ID_MA, D3Ac
tivity, D3ID_OJ, D3Project, D3Opportunity, D3ID_C006, D3Enquiry, D3ID_PR, D3Quot
e
An error occurred!!
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0
x80070005 (E_ACCESSDENIED))

   at Microsoft.SharePoint.Library.SPRequest.GetAllWebsOfSite(String bstrUrl, Ob
ject& pvarWebs, Object& pvarWebIds, Object& pvarParentWebs, Object& pvarLangs, O
bject& pvarTitles, Object& pvarUIVersions, Object& pvarFlags, Object& pvarWebTem
plates, Object& pvarConfigurations, Object& pvarMasterUrls, Object& pvarCustomMa
sterUrls)
   at Microsoft.SharePoint.SPSite.SPWebCollectionProvider.GetWebsData(String[]&
strNames, String[]& strServiceRelUrls, Guid[]& guidWebIds, Int32[]& nLanguages,
String[]& strTitles, String[]& strDescriptions, String[]& strCreationTimes, Stri
ng[]& strModifiedTimes, Boolean[]& bUserIsWebAdmins, Int32[]& nWebTemplates, Int
16[]& nProvisionConfigs, Int16[]& nMeetingCounts, Int32[]& nUIVersions, Int32[]&
 nFlags, String[]& strMasterUrls, String[]& strCustomMasterUrls)
   at Microsoft.SharePoint.SPWebCollection.EnsureWebsData()
   at Microsoft.SharePoint.SPBaseCollection.GetEnumerator()
   at AOSPSFieldAdder.Program.AddFieldsToChilds(SPWeb web, XmlNode xml_fields) i
n C:\Projekte\AOSpsFieldAdder\Program.cs:line 433
   at AOSPSFieldAdder.Program.Main(String[] args) in C:\Projekte\AOSpsFieldAdder
\Program.cs:line 161

Code:

 

 

/// <summary>
/// Ruft 'AddFieldsToWeb' rekursiv für die Untersites der angegebenen Site auf
/// </summary>
private static void AddFieldsToChilds(SPWeb web, XmlNode xml_fields)
{
  foreach (SPWeb subweb in web.Site.AllWebs)     // <-- Zeile 433
  {
    if (subweb.ID != web.ID)
    {
      AddFieldsToWeb(subweb, xml_fields);
    }
  }
}

 

 

 

 

 Ich bin echt schon verzweifelt, irgendwie blick ich bei dem Berechtigungskonzept vom Sharepoint nicht wirklich durch. Wie finde ich raus, was mir an Rechten fehlt, wenn mir welche fehlen? Wie schaffe ich es daß diese EXE auch am Echtsystem läuft?

 

 

 

Wäre für jede Hilfe und jeden Tipp dankbar!

Armin Braunstein
AtosOrigin

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Sept. 2010 14:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie Du bereits herausgefunden hast, muß das Programm mit Rechtsklick -> Run as Admin gestartet werden. Das kann man aber in den Einstellungen der Exe (oder der Verknüpfung) fest hinterlegen.

Ansonsten hast Du ein Berechtigungsproblem. Der Zugriff auf SPSite.AllWebs ist nur SiteCollection-Admins erlaubt. Das kannst Du umgehen, wenn Du SPSite.RootWeb verwendest und dann rekursiv durch SPWeb.Webs gehst. Allerdings brauchst Du natürlich immer noch Rechte zum Hinzufügen der Felder...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
Armin Braunstein Als Antwort am 24 Sept. 2010 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo!

Vielen Dank für den Hinweis, aber was ich dann nicht ganz verstehe ist 1. warum funktioniert es dann auf meiner Entwicklungsumgebung ohne "Run as administrator" und 2. wenn ich "Run as administrator" verwende, läuft meine EXE ja nicht mehr unter dem SP_Admin-Account, welcher ja eigentlich die Berechtigung dazu hätte (SiteCollection Administrator). Gibs vielleicht ne Möglichkeit, ich weiß klingt blöd, aber "Run as administrator" mit dem SP_Admin-User zu verknüpfen?..

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Sept. 2010 14:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Armin Braunstein"]warum funktioniert es dann auf meiner Entwicklungsumgebung ohne "Run as administrator" [/quote]

Entweder weil dort UAC ausgeschaltet ist, oder weil Du unter dem vordefinierten Administrator-Account arbeitest oder weil es keine Farminstallation ist.

Ansonsten kannst Du das auch unter einem bestimmten User ausführen lassen. Stichwort: impersonation.
Du holst Dir dazu ganz normal SPSite und SPWeb und von dort einen bestimmten User. Dann erzeugst Du eine neue SPSite (Überladung des Konstruktors) mit dem Token dieses Users.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
Armin Braunstein Als Antwort am 24 Sept. 2010 14:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ah ich wusste nicht daß es berechtigungsmäßig zwischen einer Farminstallation und einer "normalen" Installation einen Unterschied gibt. Ok danke, ich werds mal mit dem Impersonieren versuchen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Sept. 2010 15:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Armin Braunstein"]ich wusste nicht daß es berechtigungsmäßig zwischen einer Farminstallation und einer "normalen" Installation einen Unterschied gibt[/quote]

Ich meinte eigentlich auch mehr den Unterschied zwischen einer Installation mit AD vs. Installation mit lokalen Accounts. Und ich bin mir nicht ganz sicher, ob UAC da einen Unterschied macht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
Armin Braunstein Als Antwort am 24 Sept. 2010 15:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

*freu* es funktioniert jetzt! Habe SPUserToken.SystemAccount verwendet und nun funktioniert es! Zwar auch nur dann wenn ich trotzdem "Run as Adminstrator" verwende, etwas strange (dachte "SystemAccount" wäre "Run as administrator"), aber hauptsache es funktioniert jetzt.

Vielen vielen Dank!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Sept. 2010 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Armin Braunstein"] SPUserToken.SystemAccount [/quote]

Diese Möglichkeit hatte ich ganz übersehen. Man muß sich also gar nicht erst einen User besorgen, um an dessen Token zu kommen.

[quote user="Armin Braunstein"]dachte "SystemAccount" wäre "Run as administrator"[/quote]

Das eine hat mit dem anderen nichts zu tun. System Account ist innerhalb der SharePoint-Farm. Run as Admin wird wegen Windows-UAC benötigt.

Viele Grüße
Andi
af @ evocom de
Blog