Maison >développement back-end >C++ >Comment démarrer un processus .NET en tant qu'utilisateur différent avec des privilèges élevés ?

Comment démarrer un processus .NET en tant qu'utilisateur différent avec des privilèges élevés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-11 11:51:42696parcourir

How to Start a .NET Process as a Different User with Elevated Privileges?

Exécuter un processus .NET avec des privilèges élevés et des informations d'identification alternatives

Cet article explique comment exécuter une application .NET avec des droits d'administrateur à l'aide d'un autre compte utilisateur.

Le défi :

Tenter de lancer un processus exigeant un accès administratif entraîne souvent une erreur de privilèges insuffisants.

Exemple de code (à titre d'illustration) :

<code>public class ImpersonationHelper : IDisposable
{
    // Impersonation code (omitted for brevity)...
}

using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx"))
{
    if (!string.IsNullOrEmpty(txtFilename.Text))
        Process.Start(txtFilename.Text);
}</code>

La solution : lancer directement avec des privilèges élevés

Plutôt que l'usurpation d'identité de l'utilisateur, créez directement un nouveau processus avec des privilèges élevés :

<code class="language-csharp">System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Security.SecureString ssPwd = new System.Security.SecureString();

proc.StartInfo.UseShellExecute = true; // Note: Changed to true for elevation
proc.StartInfo.FileName = "filename";
proc.StartInfo.Arguments = "args...";
proc.StartInfo.Domain = "domainname";
proc.StartInfo.UserName = "username";
proc.StartInfo.Password = new System.Security.SecureString(); //  Important: Handle password securely

string password = "user entered password";
foreach (char c in password)
{
    proc.StartInfo.Password.AppendChar(c);
}
proc.StartInfo.Password.MakeReadOnly();

proc.Start();
proc.StartInfo.Password.Dispose(); //Dispose of the SecureString</code>

Cette méthode lance un nouveau processus en utilisant les informations d'identification fournies, en lui accordant les privilèges administratifs nécessaires. N'oubliez pas de gérer les mots de passe en toute sécurité en utilisant SecureString. Le UseShellExecute = true est crucial pour l’élévation des privilèges. L'exemple précédent utilisant false ne fonctionnerait pas à cette fin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn