.NET Start Process具有更高的权限

Ken*_*avR 8 .net c# process admin-rights

我试图通过C#应用程序执行具有管理员权限的程序,该应用程序仅使用用户权限进行调用.

        ProcessStartInfo psi;
        try
        {
            psi = new ProcessStartInfo(@"WINZIP32.EXE");

            psi.UseShellExecute = false;
            SecureString pw = new SecureString();
            pw.AppendChar('p');
            pw.AppendChar('a');
            pw.AppendChar('s');
            pw.AppendChar('s');   
            pw.AppendChar('w');
            pw.AppendChar('o');
            pw.AppendChar('r');
            pw.AppendChar('d');
            psi.Password = pw;
            psi.UserName = "administrator";

            Process.Start(psi);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
Run Code Online (Sandbox Code Playgroud)

它确实启动winzip,但仅限用户权限.有什么我做错了,或者甚至有可能开始一个更高权利的过程?

谢谢!

编辑:这是问题背后的原因,也许它有助于理解我真正需要的东西.

我以winzip为例,大致了解了我的代码是不正确的.实际问题是,我们公司使用2个版本的程序.但在启动任何版本之前,您需要使用regsvr32(具有管理员权限)导入dll文件.现在我想编写一个程序,让用户选择版本,导入dll并启动正确的应用程序.

San*_*nen 10

您需要设置ProcessStartInfo.UseShellExecutetrueProcessStartInfo.Verbrunas:

Process process = null;
ProcessStartInfo processStartInfo = new ProcessStartInfo();

processStartInfo.FileName = "WINZIP32.EXE";

processStartInfo.Verb = "runas";
processStartInfo.WindowStyle = ProcessWindowStyle.Normal;
processStartInfo.UseShellExecute = true;

process = Process.Start(processStartInfo);
Run Code Online (Sandbox Code Playgroud)

这将导致应用程序以管理员身份运行.但是,UAC会提示用户确认.如果这不合适,那么您需要添加清单以永久提升主机进程特权.