Solución:
Pregunta 1: Sí, puedes.
public ActionResult Index()
{
Process.Start(@"c:WindowsSystem32cmd.exe");
return View();
}
Pregunta 2: El proceso se ejecutará en la cuenta IIS, que puede no tener los privilegios que necesita su proceso. Puede hacerse pasar por otro usuario antes de llamar a Process.Start (). Vea este ejemplo:
Cambiar de usuario para ejecutar el programa de formularios de Windows
Puede crear un servicio web (utilizar asp.net web api) y ponga su código de sincronización dentro. La API web se puede alojar en IIS (o también puede hacer un alojamiento que no sea IIS) y puede acceder a este punto final de la API web desde su aplicación asp.net mvc cuando el usuario hace clic en el botón de sincronización en la interfaz de usuario. Puedes utilizar HttpClient
class para realizar la llamada Http a la API web.
Ahora, desde su aplicación de consola, que se invoca desde el programador de tareas, puede hacer lo mismo. es decir, puedes usar HttpClient
class para realizar una llamada http al punto final de la API web que ejecuta su código para sincronizar sus datos.
Si bien esto responde a su pregunta original, no es una buena idea ejecutar una tarea en segundo plano en un hilo de asp.net. El dominio de la aplicación puede dejar de funcionar en cualquier momento por muchas razones y también eliminará su tarea de larga duración. Pero, afortunadamente, existen algunas soluciones elegantes y fáciles de usar disponibles.
- HangFire
- FluentScheduler
- Cuarzo
Estas bibliotecas se han diseñado en torno a algunas de las dificultades de ejecutar manualmente algún código en segundo plano en ASP.NET. Eche un vistazo a esta publicación de blog donde scott explica cómo usar estas bibliotecas.