none
Crear tarea en C# RRS feed

  • Pregunta

  • Hola Desarrolladores, tengo una duda resulta que estoy haciendo una consola que me crea una tarea programada en windows, al colocarle las credenciales de windows me crea la tarea sin problemas, el problema es que necesito crear esa tarea programada sin las credenciales, algúna idea de cómo hacerlo?

    acá el código:

      using (ScheduledTasks Tareas = new ScheduledTasks())
                        {
    
                            TaskScheduler.Task tarea = Tareas.CreateTask("ReprogramandoPO");
                            Tareas.DeleteTask("ReprogramandoPO");
                           
                            tarea.ApplicationName = @"C:\Users\"+userName+"\\Programa.exe";
                            tarea.Comment = "Tarea programada";
                            //Al quitarle el SetAccountInformation no me crea la tarea en el equipo
                            tarea.SetAccountInformation("userName", "Password");
                            
                            tarea.MaxRunTime = new TimeSpan(0, 15, 0);
                            tarea.Creator = "User";
                            
                            tarea.Priority = System.Diagnostics.ProcessPriorityClass.Normal;
                            
                            tarea.Triggers.Add(new RunOnceTrigger(task.AddHours(1)));
                            tarea.Save();
                        }



    Joel Baez

    jueves, 22 de noviembre de 2018 14:57

Respuestas

  • Prueba a forzar la sobrecarga. En lugar de null ponle (string)null. o declara un string, métele null, y pásale el string a la función. Nótese que esto es C# puro y duro, no tiene nada que ver con el hecho de que estés creando un Task, es algo que te podría ocurrir con cualquier otra llamada a cualquier otra función que admita varias sobrecargas.
    viernes, 23 de noviembre de 2018 8:51
    Moderador

Todas las respuestas

  • Una opcion es poner tarea.SetAccountInformation("", null). Esto hace que la tarea se ejecute como "SYSTEM", pero requiere que el usuario que ejecuta la aplicacion de consola sea Administrador.

    jueves, 22 de noviembre de 2018 15:30
    Moderador
  • No compila, tira error

    Joel Baez

    jueves, 22 de noviembre de 2018 15:49

  • Error CS0121 The call is ambiguous between the following methods or properties: 'Task.SetAccountInformation(string, string)' and 'Task.SetAccountInformation(string, SecureString)'

    Joel Baez

    jueves, 22 de noviembre de 2018 15:57
  • hola

    Analicemos la documentacion de la libreria

    A New Task Scheduler Class Library for .NET

    Tienes justamente la pregunta que hace referencia a como asignar las credenciales.

    Must I have an account and password for a task?

    A scheduled task must be given a specific account in which to run or it may be set to run in the local system account. The local system account is a pseudo-account used by many of the standard services. It has broad access to the local system, but it cannot always interact with the user directly and it has no network privileges. To set a task to run in the local system account, the client must be already running in that account or in an administrator account.

    If the task will need to interact with the user, you need to set a specific user account and the task will only interact with that user. If your client runs in different accounts depending on who is using it, you can have it schedule tasks without actually knowing the user's password. To this, you set a specific task flag, RunOnlyIfLoggedOn and give the user name and a null password.

    El indicar o no el usuario y password tiene que ver si la aplicacion que vas a ejecutar tendra interaccion con el usuaurio.

    Podrias indicar la propiedad RunOnlyIfLoggedOn entonces definir el nombre de un usuario pero con el password en null

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 23 de noviembre de 2018 4:29
  • Prueba a forzar la sobrecarga. En lugar de null ponle (string)null. o declara un string, métele null, y pásale el string a la función. Nótese que esto es C# puro y duro, no tiene nada que ver con el hecho de que estés creando un Task, es algo que te podría ocurrir con cualquier otra llamada a cualquier otra función que admita varias sobrecargas.
    viernes, 23 de noviembre de 2018 8:51
    Moderador