2011-11-17 14 views
5

Ho il codice che utilizza l'oggetto TaskManager C# per creare un'attività. Su Windows 7 funziona bene, ma su Windows XP (e presumibilmente su altri Windows) non funziona affatto perché l'utente predefinito per l'attività è il sistema e quindi non c'è nessuna sessione per la GUI da visualizzare. Se modifico manualmente l'attività creata nel widget del pannello di controllo per impostare l'esecuzione del lavoro solo quando l'utente è connesso e solo per l'utente specifico, allora tutto funziona perfettamente. Ma nonostante le ore di ricerca, non vedo opzioni per l'impostazione di queste opzioni negli oggetti C#. Qualcuno conosce una soluzione con gli oggetti esistenti? Mi dispiacerebbe riscrivere tutto per eseguire manualmente il programma di pianificazione EXE e inoltrare materiale tramite la riga di comando.Come impostare "Esegui solo se loggato" e "Esegui come" con TaskScheduler in C#?

Q

+1

L'interfaccia dell'utilità di pianificazione è basata su COM, è necessario ad esempio IScheduledWorkItem :: SetFlags(). Non esiste un "oggetto TaskManager C#". Forse dovresti pubblicare un link al codice che hai trovato da qualche parte? –

+0

Grazie! Ho finito per scoprirlo da solo, ma ovviamente avevi ragione su di me che avevo usato un wrapper di terze parti, non me ne rendevo conto! Ho pubblicato la soluzione. –

+0

@QuinxyvonBesiex Dovresti aggiungere la tua risposta qui sotto e dopo aver richiesto il tempo necessario, selezionalo come risposta - mantiene le cose pulite – Prescott

risposta

4

Va bene, ho capito la risposta!

Non me ne sono reso conto ma stavo usando uno Task Scheduler Managed Wrapper di terze parti (era da un po 'che non scrivo quella parte del mio codice) e questo spiega perché è stato difficile trovare aiuto! Mi sono imbattuto in quella pagina un momento fa e proprio lì nei loro esempi era proprio quello di cui avevo bisogno! Il detailed solution in context can be found here, ma la parte fondamentale è:

// Create a new task definition and assign properties 
TaskDefinition td = ts.NewTask(); 
td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
td.Principal.LogonType = TaskLogonType.InteractiveToken; 

Grazie per cercare di aiutare!

+0

In alcuni casi c'è molto di più del semplice impostazione del tipo di accesso. Se questa risposta da sola non fa funzionare il tuo codice, vedi questa domanda: http: //stackoverflow.com/questions/43599271/how-to-set-run-only-if-logged-in-and-run-as- con-TaskScheduler-in-c/43767201 # 43767201 – MadTigger