使用没有管理员权限的“schtasks”调度任务C#

时间:2012-04-07 15:00:20

标签: 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);

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

3 个答案:

答案 0 :(得分:2)

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

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

    Process.Start(psi);

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

答案 1 :(得分:0)

  

为什么每次展览都要求用户中断   为展览目的而安装的展位PC?

如果您想要一个隐藏的程序,只要它在启动时在PC上运行,并且您的任务无害,您可以将其添加到以下注册表项中:

  

HKCU \ SOFTWARE \的Windows \ CurrentVersion \运行

编程。如果需要,我可以提供代码。

答案 2 :(得分:0)

TextBox的内容:“SCHTASKS.exe / Create / ST 06:30 / SC DAILY / TN report / TR notepad.exe”

我能够使用Process.Start(ProcessStartInfo);

ProcessStartInfo psinfo = new ProcessStartInfo();

psinfo.Filename = "powershell.exe";
psinfo.Args = textbox1.text;

Process.Start(psinfo);

**当然,这只适用于安装了PowerShell的计算机,使用cmd.exe无法创建计划任务...