Question

Regarde comme j'ai fait une grosse erreur en faisant quelques essais avec un exemple de projet sharepoint.Ironiquement, j'ai essayé de monter une unité de tests de la solution, sans avoir à écrire de nombreux tests en premier.Je suis encore assez nouveau pour SharePoint, et je voulais explorer ce que je peux / ne peux pas faire avec la SP et de la Coi.

Sans entrer dans trop de détails, j'ai écrit un code qui est récursif et finit de jeter un StackOverflowException.Pas une grosse affaire, non?Juste de rentrer la solution et de le supprimer.Le problème est que ce code soit appelée au cours d'une fonctionnalité de solution de FeatureUninstalling méthode dans un SPFeatureReceiver.

(Eh bien, pas exactement.Le code finissent par être appelé au cours de la SPFeatureReceivers 'constructeur statique.Si vous vous demandez pourquoi, j'étais en train de composer de la racine à l'aide de Château de Windsor afin d'injecter des dépendances qui peuvent être utilisés au cours de la FeatureInstalling et FeatureUninstalling méthodes.)

Donc ce qui arrive lorsque vous essayez d'utiliser la centrale d'administration de site web ou de Désinstallation-SPSolution est:

  1. Un travail est prévu pour rétracter la solution.
  2. Le travail s'exécute et tente de se rétracter de la solution.
  3. Le travail construit une nouvelle SPFeatureReceiver pour invoquer FeatureUninstalling.
  4. Le SPFeatureReceiver (statique) constructeur invoque le code qui va essayer de composer la racine, et à l'intérieur il y, finit par jeter un StackOverflowException.
  5. Je reçois un message indiquant que OWSTIMER.exe rencontré une exception, et me demande si je veux de débogage.
  6. OWSTIMER.exe redémarre et revient en boucle à l'étape #2.

D'où la question:Comment se rétracter un unretractable solution?

Était-ce utile?

La solution

Avez-vous essayé de commenter le code fautif, la reconstruction/reconditionnement, puis l'exécution d'un Update-SPSolution de commande?

L' FeatureUninstalling l'événement se produit sur l'enlèvement, et, je crois, il ne sera pas appelé lors de la mise à niveau (c'est ce que l' FeatureUpgrading l'événement est pour).

Si vous pouvez mettre à niveau avec succès et remplacer le code malveillant, vous serait alors en mesure de retirer en toute sécurité la solution.

Sur la deuxième pensée, ma suggestion ci-dessus ne fonctionnerait pas, car si cette exception se produit dans le constructeur, plutôt que l'événement, évidemment, ce serait encore appelé quelle que soit la solution méthode de modification (Mise à niveau ouDésinstaller).Vous pourriez remplacer manuellement les .dll dans le GAC après avoir retiré le code incriminé bien, et puis d'essayer de rétractation.

Autres conseils

J'avais eu une idée similaire à @RJ Cuthbertson réponse concernant le GAC, mais il ne me laisserait pas désinstaller n'importe quoi à partir de là. Jusqu'à ce que j'ai trouvé ce:

IMPORTANT!Jamais, jamais, jamais faire cela sur un système de production, et toujours la réactiver par la suite.

  1. Ouvrez Stratégie de Sécurité Locale MMC

  2. Goto Paramètres De Sécurité -> Stratégies Locales -> Options De Sécurité

  3. Recherchez "Contrôle De Compte D'Utilisateur:Exécuter tous les administrateurs de l'Approbation de l'Administrateur" et de modifier le paramètre Activé à Désactivé

  4. Reboot et maintenant, les assemblées peuvent être supprimés.

  5. Suivez les étapes ci-dessus pour réactiver la politique locale de sécurité configuration et redémarrez à nouveau pour la remettre.

Après l'étape #4 ci-dessus, j'ai été en mesure de supprimer Castle.Windsor.dll à partir du GAC, et après cela, la rétraction / désinstaller / supprimer tous travaillé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top