Función “MoveFile” en C # (Eliminar archivo después de reiniciar)

Necesito un ejemplo que me permita pasar un parámetro

por ejemplo, ejecutando delete.exe /killme.txt

Por lo tanto, utilizará el “MoveFile” para eliminar killme.txt después de reiniciar.

Aunque, por favor, no la versión precomstackda de MS, ya que tiene un descargo de responsabilidad molesto, cada vez que se ejecuta en una computadora diferente.

Necesitará las declaraciones de P / Invoke para MoveFileEx :

[Flags] internal enum MoveFileFlags { None = 0, ReplaceExisting = 1, CopyAllowed = 2, DelayUntilReboot = 4, WriteThrough = 8, CreateHardlink = 16, FailIfNotTrackable = 32, } internal static class NativeMethods { [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Unicode)] public static extern bool MoveFileEx( string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags); } 

Y un código de ejemplo:

 if (!NativeMethods.MoveFileEx("a.txt", null, MoveFileFlags.DelayUntilReboot)) { Console.Error.WriteLine("Unable to schedule 'a.txt' for deletion"); } 

Como desea realizar esto después del reinicio como requisito, puede usar la API del Progtwigdor de tareas de Windows. Puede invocar esto en C # agregando una referencia a la biblioteca COM Biblioteca de tipos de TaskScheduler 1.1. A continuación se muestra un ejemplo de código completo sobre la ejecución de Notepad.exe en el inicio de sesión.

Además, aquí hay otro recurso: http://bartdesmet.net/blogs/bart/archive/2008/02/23/calling-the-task-scheduler-in-windows-vista-and-windows-server-2008-from -managed-code.aspx

Puede llamar al comando del sistema DEL desde la línea de comandos de Windows, potencialmente con este código.

 namespace TaskSchedulerExample { using System; using TaskScheduler; class Program { static void Main(string[] args) { var scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = "DCOM Productions"; task.RegistrationInfo.Description = "Demo"; ILogonTrigger trigger = (ILogonTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON); trigger.Id = "Logon Demo"; IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Id = "Delete"; action.Path = "c:\\delete.exe"; // Or similar path action.WorkingDirectory = "c:\\"; // Working path action.Arguments = "c:\\killme.txt"; // Path to your file ITaskFolder root = scheduler.GetFolder("\\"); IRegisteredTask regTask = root.RegisterTaskDefinition("Demo", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, ""); //Force run task //IRunningTask runTask = regTask.Run(null); } } } 

Esto te da algo de flexibilidad. Podría ejecutar su propio delete.exe, o podría invocar la línea de comandos de Windows para ejecutar el comando DEL.