以系统帐户的身份运行exe

本文关键字:身份 运行 exe 系统 | 更新日期: 2023-09-27 18:26:20

我正试图将我的c#exe作为系统帐户运行。我该怎么做。我试过<requestedExecutionlevel level="requireAdministrator"> and <requestedExecutionlevel level="requireSystem">管理员正在工作,但第二个不工作。

请帮我怎么做。

以系统帐户的身份运行exe

据我所知,你不能强迫你的应用程序作为SYSTEM运行。您的应用程序必须是一个服务,并且该服务设置为以系统形式运行,或者您必须使用PsExec等工具以系统形式启动可执行文件。

psexec.exe -i -s YourProgram.exe

当使用requestedExecutionlevel时,只有3个有效选项是

  • requireAdministrator-始终提示UAC(即使用户不是管理员)
  • asInvoker-从不提示UAC
  • highestAvailable-如果用户是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