2009-07-21 4 views

Répondre

5

Essayez d'exécuter la tâche Exec RunAs.exe qui irait à l'xcopy.exe

+0

et comment spécifieriez-vous le mot de passe de cet utilisateur dans msbuild? – arconaut

+1

vous avez raison, j'ai oublié RunAs _asks_ pour mot de passe vs acceptant comme un paramètre :( Je suppose que vous pourriez utiliser/savecred mais cela vous obligerait à le faire manuellement la première fois, sur la machine de construction et sous les informations d'identification – zvolkov

11

Il est préférable de créer une extension rapide de la tâche CallTarget qui utilise Impersonator par Uwe Keim, comme ceci:

public class Impersonate : CallTarget 
{ 
    public string Domain { get; set; } 

    [Required] 
    public string UserName { get; set; } 

    [Required] 
    public string Password { get; set; } 

    public override bool Execute() 
    { 
     using (new Impersonator(this.UserName, this.Domain, this.Password)) 
     { 
      return base.Execute(); 
     } 
    } 
} 

Ensuite, appel ressemblera à ceci:

<Target Name="DoSms"> 
    <....> 
</Target> 

<Target Name="Impersonate"> 
    <Impersonate Targets="DoSms" UserName="username" Password="password" Domain="domain"/> 
</Target> 
+0

J'ai compilé votre code et j'ai mis un 'dans' DoSmS' Il a imprimé mon nom d'utilisateur, pas l'utilisateur usurpé. cette classe de CodeProject Impersonator peut avoir besoin de quelques ajustements pour fonctionner correctement avec MSBuild –

+2

Oui, je l'ai fait, en fait ce code fonctionne maintenant sur notre serveur de construction Le problème que vous décrivez est causé par MSBuild spécifique: $ (USERNAME) est en fait variable d'environnement, et ils sont chargés dans les propriétés une fois au démarrage du projet.Il affichera toujours le nom d'utilisateur du projet de lancement de l'utilisateur.Si vous voulez le voir fonctionner de cette façon, vous peut créer une tâche primitive qui imprime le nom d'utilisateur du thread actuel et l'appeler. Comme vous avez déjà projeté avec tâche en lien avec le fichier projet, ce ne sera pas un gros problème;) –

+0

Ah ça l'explique. Merci! –

Questions connexes