以系统帐户的身份运行exe
本文关键字:身份 运行 exe 系统 | 更新日期: 2023-09-27 18:26:20
我正试图将我的c#exe作为系统帐户运行。我该怎么做。我试过<requestedExecutionlevel level="requireAdministrator"> and <requestedExecutionlevel level="requireSystem">
管理员正在工作,但第二个不工作。
请帮我怎么做。
据我所知,你不能强迫你的应用程序作为SYSTEM运行。您的应用程序必须是一个服务,并且该服务设置为以系统形式运行,或者您必须使用PsExec等工具以系统形式启动可执行文件。
psexec.exe -i -s YourProgram.exe
当使用requestedExecutionlevel
时,只有3个有效选项是
requireAdministrator
-始终提示UAC(即使用户不是管理员)asInvoker
-从不提示UAChighestAvailable
-如果用户是Administrators组的成员,则提示UAC,但如果用户不是该组的成员则不提示并以普通用户身份运行
这不可能直接。如果你是管理员,有一些技巧(比如从已经运行的服务或其他东西中获取安全令牌),但我不建议使用这些方法。
SYSTEM帐户的意义正是:它只由系统直接运行。
如果你想要一种没有第三方工具(如psexec
)的简单方法,你可以设置一个ONEEVENT
调度任务(使用schtasks
,它是操作系统的一部分),它确实可以使用系统帐户运行。这仍然需要两个进程(尽管它可能是相同的exe
,具有用于任务和设置任务的不同命令行参数),但它可以工作。
我知道我迟到了7年,但我发现这是有效的。这种代码的平静基本上运行指定为系统用户的程序。
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "schtasks.exe",
Arguments = $"/Create /RU '"NT AUTHORITY''SYSTEM'" /RL HIGHEST /SC ONCE /TN MyTask /TR '"{program} {programArgs}'" /ST {DateTime.Now.AddSeconds(5):HH:mm:ss} /F",
Verb = "runas", // Run the process as an administrator
CreateNoWindow = false,
UseShellExecute = false
};
Process process = Process.Start(startInfo);
process.WaitForExit();
Console.WriteLine(process.ExitCode);
startInfo = new ProcessStartInfo
{
FileName = "schtasks.exe",
Arguments = $"/Run /TN MyTask",
Verb = "runas", // Run the process as an administrator
CreateNoWindow = true,
UseShellExecute = false
};
process = Process.Start(startInfo);
process.WaitForExit();
Console.WriteLine(process.ExitCode);
startInfo = new ProcessStartInfo
{
FileName = "schtasks.exe",
Arguments = $"/Delete /TN MyTask /F",
Verb = "runas", // Run the process as an administrator
CreateNoWindow = true,
UseShellExecute = false
};
process = Process.Start(startInfo);
process.WaitForExit();
Console.WriteLine(process.ExitCode);
Console.ReadLine();
此代码将执行任何带有任何args的程序,作为nt authority''system。请记住,它与窗口显示不兼容(将始终在后台运行)。我们可以通过定义要运行的cmd来验证这是否有效,该cmd创建一个输出为"的文件;whoami":
string program = Environment.GetEnvironmentVariable("ComSpec"); // Path to cmd.exe
string programArgs = $"/C whoami > '"C:''Users''{Enviroment.UserName}''Desktop''text.txt'"";
现在,您可以在桌面上找到文本.txt文件,其中包含文本nt authority'system