在 C# 中,是否可以模拟管理员用户并以管理员权限运行另一个程序而不要求输入密码? - 解决了

问题描述 投票:0回答:1

技术团队不想授予所有用户计算机的管理员权限。 但这些用户仍然应该能够自行更新一个软件。 因此,在该软件内部,应该启动另一个具有管理员权限的软件。 他们将设置一名管理员用户,该用户将对所有计算机拥有管理员权限。然后代码应该使用此管理员用户及其密码来模拟管理员。因此它应该以另一个用户身份启动更新软件。

我尝试这样做,但当我尝试使用管理员权限运行时,它仍然要求输入用户名和密码。 我已经检查过 System.Security.Principal.WindowsIdentity.GetCurrent().Name;返回代码内的用户管理员用户名。所以它确实冒充了另一个用户。

问题是,在窗户内也可能吗? 如何以管理员身份运行,并且只出现UAC提示,而不询问用户和密码?

我冒充这个

SafeAccessTokenHandle safeAccessTokenHandle;  
bool returnValue = LogonUser(user, domain, password,  
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,  
out safeAccessTokenHandle);

然后以这种方式运行其他进程。

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    WindowsIdentity.RunImpersonatedAsync(  
        safeAccessTokenHandle,                  
        async () =>  
        {                        
            try 
            {           
                await RunProcessAsync("XYZ.exe","", true);
                
            }
            catch (Exception e){
                Console.WriteLine(e.Message);
            }
        } 
    );
}


static Task<int> RunProcessAsync(string fileName, string arguments = "", bool runAsAdmin = false)
{
    var tcs = new TaskCompletionSource<int>();

    var process = new Process
    {
        StartInfo = { FileName = fileName, Arguments = arguments, UseShellExecute = true, LoadUserProfile = true },
        EnableRaisingEvents = true                  
    };

    if (runAsAdmin) process.StartInfo.Verb = "runas";
    
    process.Exited += (sender, args) =>
    {
        tcs.SetResult(process.ExitCode);
        process.Dispose();
    };            
    process.Start();

    return tcs.Task;
}

我尝试冒充管理员用户 然后使用管理员权限运行另一个程序,用户所要做的就是同意 UAC 提示。 我本来希望能够在不询问用户名和密码的情况下运行,但它仍然询问。

编辑

它似乎有效,但如果从 .net 框架应用程序调用,这段代码将无法工作。它仍然会要求输入登录名和密码。 但如果您从 .NET 6 应用程序调用,它就会起作用。然后它会冒充管理员,然后只会进行 UAC 提示是或否。

c# prompt impersonation uac admin-rights
1个回答
0
投票

技术团队不想授予所有用户计算机的管理员权限。但这些用户仍然应该能够自行更新一个软件。

  • 如果您希望允许任何用户能够更新您的应用程序
  • 然后授予所有用户修改文件夹内容的权限

这是安装程序在安装过程中具有管理员访问权限时应该执行的操作。

  • 实际上,他们不需要完全控制(即他们不需要更改文件夹权限的权限)
  • 他们可以通过 修改
  • 来解决

这就是Microsoft魔兽世界所做的事情;他们创建了一个应用程序兼容的垫片,授予每个人“修改”“魔兽世界”文件夹的权限。这样 12 岁的孩子就能获得游戏更新。

© www.soinside.com 2019 - 2024. All rights reserved.