C#中的“MoveFile”function(重启后删除文件)

我需要一个例子,可以让我传递一个参数

例如执行delete.exe /killme.txt

所以它将使用“MoveFile”在重启后删除killme.txt。

虽然请不要MS预编译版本,因为它有一个恼人的免责声明,每次运行在不同的计算机上。

Solutions Collecting From Web of "C#中的“MoveFile”function(重启后删除文件)"

您将需要MoveFileEx的P / Invoke声明:

[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); } 

和一些示例代码:

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

因为要在重新启动后执行此操作,所以可以使用Windows任务计划程序API。 您可以在C#中通过添加对COM库TaskScheduler 1.1类型库的引用来调用此方法。 以下是在登录时运行Notepad.exe的完整代码示例。

另外,这里是另一个资源: http : //bartdesmet.net/blogs/bart/archive/2008/02/23/calling-the-task-scheduler-in-windows-vista-and-windows-server-2008-from -managed-code.aspx

您可以从Windows命令行调用系统命令DEL,可能使用此代码。

 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); } } } 

这给你一些灵活性。 您可以运行自己的delete.exe,也可以调用Windows命令行来执行DEL命令。