Планирование задач с помощью «schtasks» без прав администратора C#

Я пытаюсь запланировать задачи из своего приложения с помощью schtasks вместо использования COM/управляемого API Планировщика заданий Windows.
Создать задачу здесь проще, используя это в командной строке 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);

Однако задача создается только в том случае, если я запускаю свое приложение от имени администратора. Мне нужно избежать этого, чтобы любой пользователь мог создать задачу без хлопот, связанных с запуском приложения в качестве администратора. Любые предложения о том, как это сделать?


person user1240679    schedule 07.04.2012    source источник
comment
Чем именно вы занимаетесь? Вы имеете в виду, что задача создается или запускается при запуске от имени администратора?   -  person Chibueze Opata    schedule 07.04.2012
comment
@Chibueze Opata: Нет, задача даже не создана.   -  person user1240679    schedule 07.04.2012
comment
Да, но почему вы хотите избежать привилегий администратора? Это выглядит подозрительно.. обходной путь довольно надуманный.. и не рекомендуется   -  person Chibueze Opata    schedule 07.04.2012
comment
@Chibueze Opata: потому что приложение работает как демо-версия и должно работать автоматически без какого-либо вмешательства/ввода пользователя.   -  person user1240679    schedule 07.04.2012
comment
демо для непрерывной работы на ПК людей всякий раз, когда они входят в систему без их согласия?   -  person Chibueze Opata    schedule 07.04.2012
comment
Почему это должно каждый раз прерывать работу пользователя на ПК выставочного стенда, установленного только для экспонирования?   -  person user1240679    schedule 07.04.2012


Ответы (3)


Вы можете попробовать своего рода RunAs, который позволяет запускать процесс с указанным пользователем:

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

    Process.Start(psi);

Класс Process через ProcessStartInfo предоставляет механизм, который позволяет указать пользовательский контекст, в котором должен выполняться новый процесс, поэтому вы можете указать пользователя, от имени которого вы хотите запустить команду, даже если пользователь, запускающий программу, отличается. В вашем случае вы можете указать учетные данные администратора для ProcessStartInfo без необходимости запускать программу с правами администратора...

person aleroot    schedule 07.04.2012
comment
Итак, когда я распространяю свое приложение, какое имя пользователя и пароль в этом случае? ;-/ Получение ввода от пользователя было бы очень странным, поскольку в совершенно не связанном приложении пользователь может даже не предоставлять учетные данные. - person user1240679; 07.04.2012
comment
Что произойдет на ПК, где пользователь не настроил свой пароль? - person user1240679; 07.04.2012
comment
Я не знаю, есть разные способы обработки ситуации, это зависит от контекста... - person aleroot; 07.04.2012
comment
Лично у меня на домашней машине нет пароля. Итак, я не уверен, что здесь делать. - person user1240679; 07.04.2012

Почему это должно каждый раз прерывать работу пользователя на ПК выставочного стенда, установленного только для экспонирования?

Если вам нужна скрытая программа, которая будет запускаться на ПК всякий раз, когда он загружается, и ваша задача не представляет опасности, вы можете добавить ее в следующий раздел реестра:

HKCU\Software\Windows\CurrentVersion\Выполнить

программно. Я могу предоставить код, если нужно.

person Chibueze Opata    schedule 07.04.2012
comment
Я уже пробовал этот подход, но это не решает задачу автоматического запуска приложения в 6 утра, что можно сделать с помощью планировщика заданий. :-/ - person user1240679; 07.04.2012
comment
Извините, у меня просто проблемы со взглядом на вещи так, как видите их вы. Ваши объяснения всегда кажутся туманными... Возможно, taskscheduler.codeplex.com может вам помочь. Удачи - person Chibueze Opata; 07.04.2012

Содержимое 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 не удалось создать запланированное задание...

person John Bartels    schedule 07.04.2012