2011-11-17 5 views
5

Tengo un código que usa el objeto C# TaskManager para crear una tarea. En Windows 7 funciona bien, pero en Windows XP (y presumiblemente en otros Windows) no funciona en absoluto porque el usuario predeterminado para la tarea es el sistema y, por lo tanto, no hay sesión para que se muestre la GUI. Si modifico la tarea creada manualmente en el widget del panel de control para configurar el trabajo para que se ejecute solo cuando el usuario está conectado y solo para el usuario en particular, todo funciona perfectamente. Pero a pesar de las horas de búsqueda, no veo opciones para configurar estas opciones en los objetos C#. ¿Alguien sabe una solución con los objetos existentes? Odiaría volver a escribir todo para ejecutar manualmente el programador EXE y pasar cosas por línea de comandos.Cómo establecer "ejecutar solo si está conectado" y "ejecutar como" con TaskScheduler en C#?

Q

+1

La interfaz del planificador de tareas está basada en COM, necesitará IScheduledWorkItem :: SetFlags() por ejemplo. No hay ningún "objeto C# TaskManager". ¿Tal vez deberías publicar un enlace al código que encontraste en alguna parte? –

+0

¡Gracias! Terminé descubriéndolo por mi cuenta, pero por supuesto tenías razón acerca de que yo había usado un envoltorio de terceros, ¡no me di cuenta de eso! Publiqué la solución. –

+0

@QuinxyvonBesiex Debe agregar su respuesta a continuación y luego, después de la cantidad de tiempo requerida, seleccionarla como la respuesta: mantiene las cosas limpias – Prescott

Respuesta

4

bien, me di cuenta de la respuesta!

No me di cuenta pero había estado utilizando un tercero Task Scheduler Managed Wrapper (había pasado un tiempo desde que escribí esa parte de mi código) y eso explica por qué fue difícil encontrar ayuda. ¡Tropecé con esa página hace un momento y justo en sus ejemplos era justo lo que necesitaba! El detailed solution in context can be found here, pero la parte clave es:

// 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; 

Gracias por tratar de ayudar!

+0

En algunos casos, hay más que simplemente configurar el tipo de inicio de sesión. Si esta sola respuesta no hace que su código funcione, consulte esta pregunta: http: //stackoverflow.com/questions/43599271/how-to-set-run-only-if-logged-in-and-run-as- con-taskscheduler-en-c/43767201 # 43767201 – MadTigger

Cuestiones relacionadas