【问题标题】:Start second instance of Application as Admin以管理员身份启动应用程序的第二个实例
【发布时间】:2018-09-22 16:26:10
【问题描述】:

我希望我的应用程序不需要管理员来使用它。

我应该可以用于普通用户。

当用户想要更改应用的某些设置时,我需要管理员权限。

所以我想启动需要管理员权限的应用程序的第二个实例。 (有用户协议请求等)

有没有办法做到这一点?

我试过了:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.StartInfo.FileName = Application.ExecutablePath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
if (System.Environment.OSVersion.Version.Major >= 6)
{
    p.StartInfo.Verb = "runas";
}
p.Start();

但它似乎不起作用。

【问题讨论】:

标签: c# .net user-permissions


【解决方案1】:

您可以创建一个具有管理员权限的帐户,

然后使用管理员帐户的相应值填充ProcessStartInfo 实例上的用户、密码属性。

类似:

var psi = new ProcessStartInfo
{
    FileName = "notepad.exe",
    UserName = "admin",
    Domain = "",
    Password = pass,
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
};
Process.Start(psi);

【讨论】:

    【解决方案2】:

    原来我必须在 ProcessStartInfo 中使用 UseShellExecute 而不是 Process。 更多解释here.

                ProcessStartInfo proc = new ProcessStartInfo();
                proc.UseShellExecute = true;
                proc.WorkingDirectory = Environment.CurrentDirectory;
                proc.FileName = Application.ExecutablePath;
                proc.Verb = "runas";
    
                try
                {
                    Process.Start(proc);
                }
                catch
                {
                    return; //U have a BIG problem!
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2012-09-24
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多