2

我正在尝试使用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);

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

4

3 回答 3

2

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

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

    Process.Start(psi);

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

于 2012-04-07T15:21:38.747 回答
0

为什么每次都需要用户在仅为展览目的安装的展台 PC 中中断?

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

HKCU\Software\Windows\CurrentVersion\Run

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

于 2012-04-07T16:15:09.453 回答
0

文本框的内容:“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无法创建计划任务...

于 2012-04-07T22:15:57.463 回答