gpt4 book ai didi

c# - 如何从非管理员帐户以管理员用户身份启动需要管理员权限的程序

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:22 25 4
gpt4 key购买 nike

设计流程: 非管理员用户---->程序A(非管理员)-->程序B(需要管理员)

我正在编写一个程序来启动一个需要非管理员帐户的管理员权限的程序。该程序在任何用户启动时启动,并以具有管理员权限的不同用户身份启动第二个程序(需要管理员权限)。我遇到的问题是程序说要以不同的用户身份启动程序需要管理员权限。我知道这不是真的,所以我知道我的代码中有一些不正确的地方来启动第二个进程。

代码如下:

try
{
ProcessStartInfo myProcess = new ProcessStartInfo(path);
myProcess.UserName = username;
myProcess.Password = MakeSecureString(password);
myProcess.WorkingDirectory = @"C:\Windows\System32";
myProcess.UseShellExecute = false;
myProcess.Verb = "runas"; //Does not work with or without this command
Process.Start(myProcess);
}

异常情况如下:

System.ComponentModel.Win32Exception (0x80004005): The requested operation requires elevation
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at Loader.Program.RunProgram(String path, String username, String password)

最佳答案

我猜你指的是在新创建的进程上触发 UAC 提示。如果是这样,只需几行就可以解决问题,特别是删除用户/密码属性(因为 Windows 会询问它们)并将 UseShellExecute 设置为 true:

ProcessStartInfo myProcess = new ProcessStartInfo(path);
myProcess.WorkingDirectory = @"C:\Windows\System32";
myProcess.UseShellExecute = true;
myProcess.Verb = "runas";
Process.Start(myProcess);

我注意到这种方法的两个注意事项是,如果用户取消提示,将抛出一个异常,说明用户已取消(您必须准备好取消您的处理)。此外,如果系统上禁用/不存在 UAC,则不会提升该进程。为了解决这个问题,启动的程序必须准备好检查它是否真的获得了管理员权限。

一个完全不同的方法是只向目标应用程序添加一个 list (如果您能够重新编译它)指定它需要管理员权限。

关于c# - 如何从非管理员帐户以管理员用户身份启动需要管理员权限的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com