c# - 在没有管理员权限的情况下使用 'schtasks' 调度任务 C#

标签 c# process scheduled-tasks command-line-arguments

我尝试使用 schtasks 从我的应用程序安排任务,而不是使用 Windows 任务计划程序 COM/托管 API。
在命令行上使用此命令可以更轻松地在此处创建任务 schtasks/Create/tn "MyApp"/tr c:\myapp.exe/sc onlogon 但我以管理员身份打开命令行来获取任务已创建(否则访问被拒绝)

从我的应用程序中创建我使用的任务

string args = @"/Create /tn MyApp /tr c:\myapp.exe /sc onlogon";
Process.Start("schtasks", args);

但是,只有当我以管理员身份运行应用程序时,才会创建该任务。我需要避免这种情况,以便任何用户都可以创建任务,而无需以管理员身份运行应用程序的麻烦。关于如何做到这一点有什么建议吗?

最佳答案

您可以尝试使用一种允许使用指定用户运行进程的 RunAs :

    ProcessStartInfo psi = new ProcessStartInfo("schtasks");
    psi.UseShellExecute = false;
    psi.UserName = "Username";
    psi.Password = "password";

    Process.Start(psi);

Process 类通过 ProcessStartInfo 提供了一种机制,允许您指定新进程应在其下运行的用户上下文,因此您可以指定要在其中运行命令的用户,即使启动程序的用户是不同的。在您的情况下,您可以为 ProcessStartInfo 指定管理员凭据,而无需使用管理员用户运行程序...

关于c# - 在没有管理员权限的情况下使用 'schtasks' 调度任务 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055516/

相关文章:

linux - fork() 如何知道它是在子进程中还是在父进程中?

c# - 使用任务计划程序创建重复性任务

Spring @Scheduled 在使用注解时执行任务两次

java - Apex 可调度类 : SendEmail failed INVALID_SA​VE_AS_ACTI​VITY_FLAG saveAsActi​vity must be false

c# - Asp.net MVC 在不使用 html 助手的情况下重新填充表单

java - Runtime.exec 无法在 JDK 7u25 上运行

c# - 无法从程序集 'ADODB._Recordset_Deprecated' 加载类型 'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

linux - ptrace suid 进程(在它放弃特权之后)

c# - 在调用扩展方法后,如何让 resharper 知道我的变量不为空?

java - Selenium WebDriver : For editing and deleting elements in a list, 我应该始终选择第一个元素的原因是什么,反之亦然