2

schtasksWindows タスク スケジューラの 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);

ProcessStartInfo を介した Process クラスは、新しいプロセスを実行するユーザー コンテキストを指定できるメカニズムを提供するため、プログラムを開始するユーザーが異なる場合でも、コマンドを実行するユーザーを指定できます。あなたの場合、管理者ユーザーでプログラムを実行しなくても、管理者の資格情報を 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 に答える