Uses a batch script that it creates to delete your executable, then deletes itself.

using System.Diagnostics;
using System.IO;

static private void DeleteSelf()
{
    //Use this line if your running from console
    //string pa = Process.GetCurrentProcess().MainModule.FileName;

    //Use this line if your running from Windows Form
    string pa = Application.StartupPath;
    string bf = "@echo off" + Environment.NewLine +
                ":dele" + Environment.NewLine +
                "del \"" + pa + "\"" + Environment.NewLine +
                "if Exist \"" + pa + "\" GOTO dele" + Environment.NewLine +
                "del %0";

    //string filename = RandomString(RandomNumber(5, 15)) + ".bat";
    string filename = Path.GetRandomFileName() + ".bat";

    StreamWriter file = new StreamWriter(Environment.GetEnvironmentVariable("TMP") + filename);
    file.Write(bf);
    file.Close();

    Process proc = new Process();
    proc.StartInfo.FileName = Environment.GetEnvironmentVariable("TMP") + filename;
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    proc.StartInfo.UseShellExecute = true;

    proc.Start();
    proc.PriorityClass = ProcessPriorityClass.Normal;
}