2008-11-20 7 views
2

Dans un scénario d'usurpation d'identité lié à Sharepoint, j'ai besoin d'exécuter du code dans un processus séparé (le processus s'exécutera dans le contexte d'un certain utilisateur). Je ne veux pas lancer une application séparée, fondamentalement je veux faire un "run as" sur juste une méthode.Exécution du code .net dans un processus distinct

Répondre

1

La méthode Process.Start a une surcharge pour démarrer le processus à condition que vous ayez l'utilisateur, le mot de passe et le domaine appropriés.

Ce que vous voulez faire est de créer un objet ProcessStartInfo et de spécifier le bon nom d'utilisateur et mot de passe au démarrage du processus. Ainsi, vous pouvez faire quelque chose comme ceci:

Dim psiNewProcess As New ProcessStartInfo("Notepad.exe") 

psiNewProcess.UserName = "MyUserName" 
psiNewProcess.Password = "MyPassword" 

Process.Start(psiNewProcess) 

Oh, le processus est dans l'espace de noms System.Diagnostics si elle est pas déjà importé pour votre projet.

EDIT: sidenote rapide, le mot de passe est en fait un objet de type SecureString, donc MSDN suggère de remplir la valeur de cette façon:

Dim instance As ProcessStartInfo 
Dim value As SecureString 

value = instance.Password 

instance.Password = value 
+0

Je ne veux pas lancer une nouvelle application. Est-il possible d'utiliser ProcessStartInfo pour exécuter un morceau de code à partir de l'application dans laquelle je crée le nouveau processus? – kjv

+0

Non, il n'est pas possible d'utiliser ProcessStartInfo pour cela. – skst

1

"Exécuter du code dans un processus séparé" = "lancer une application séparée". Je veux dire, vous pouvez lancer un seul processus et lui demander d'exécuter la méthode en question ... mais ce n'est pas clair si c'est ce que vous voulez.

+0

Pourriez-vous indiquer où peut trouver plus d'informations sur ce sujet, peut-être un Exemple. C'est ce que je veux faire. – kjv

+0

Fondamentalement, vous auriez besoin de démarrer un nouveau processus (une fois) et de communiquer sur un tuyau nommé (ou autre). Si vous utilisez une version récente de .NET, WCF peut être la meilleure option - alors prenez un livre WCF ou un tutoriel. –

3

Je n'ai pas essayé moi-même mais this seems pour faire l'affaire.

Si le blocage de la méthode avec emprunt d'identité est correct jusqu'à la fin, cela devrait fonctionner. Donc votre code serait quelque chose comme:

... 
WrapperImpersonationContext context = new WrapperImpersonationContext(domain, username, password); 
context.Enter(); 

Results res = MyImpersonatedMethod(data); 

context.Leave(); 
... 

Hope this helps.

+0

Lien est maintenant mort –

+0

Mais il dit Permalink dans l'URL! :) –

+0

Devinez c'est ça: http://michiel.vanotegem.nl/CommentView,guid,36633846-2eca-40fe-9957-2859d8a244dc.aspx Googling WrapperImpersonationContext retourne des résultats. –

Questions connexes