10

基本的な Windows フォーム アプリを作成しました。選択した日付の後にプログラムが自動的に削除されるようにしたいと考えています。

具体的には、誰かが .exe をクリックして実行すると、特定の日付以降であれば、.exe は削除されます。これは可能ですか?はいの場合、どうすればよいですか?

私のコードは次のようになると思います:

DateTime expiration = new DateTime(2013, 10, 31) //Oct. 31, 2013

If (DateTime.Today > expiration) 
{
    //command to self-delete
}
else  
{
    //proceed normally
}
4

7 に答える 7

9

ファイルを削除するときは、アプリケーションが既に閉じていることを確認する必要があります。次のようなものをお勧めします-もちろん、いくつかの変更が必要になります。

次の例は Windows で動作し、他のオペレーティング システム用に変更する必要があります。

/// <summary>
/// Represents the entry point of our application.
/// </summary>
/// <param name="args">Possibly spcified command line arguments.</param>
public static void Main(string[] args)
{
    string batchCommands = string.Empty;
    string exeFileName = Assembly.GetExecutingAssembly().CodeBase.Replace("file:///",string.Empty).Replace("/","\\");

    batchCommands += "@ECHO OFF\n";                         // Do not show any output
    batchCommands += "ping 127.0.0.1 > nul\n";              // Wait approximately 4 seconds (so that the process is already terminated)
    batchCommands += "echo j | del /F ";                    // Delete the executeable
    batchCommands += exeFileName + "\n";
    batchCommands += "echo j | del deleteMyProgram.bat";    // Delete this bat file

    File.WriteAllText("deleteMyProgram.bat", batchCommands);

    Process.Start("deleteMyProgram.bat");
}
于 2013-10-30T17:09:02.987 に答える
4

実行可能ファイルとライブラリ ファイルがロックされるため、実行中に自分自身を削除することはできません。プロセス ID を引数として取り、そのプロセスが終了するのを待ってから最初のプログラムを削除する 2 番目のプログラムを作成できます。それをリソースとしてメイン アプリケーションに埋め込み、展開して%TEMP%実行し、終了します。

この手法は通常、自動アップデーターと組み合わせて使用​​されますが、絶対に確実というわけではありません。

于 2013-10-30T16:57:13.413 に答える
1

はい。たとえば、時限バッチ ジョブを開始して、終了後に exe を削除します。ただし、exeが本当に削除されていることを確認することはできません。

実行中のexeは削除できません。

これはうまくいきません:

System.IO.File.Delete(System.AppDomain.CurrentDomain.FriendlyName);
于 2013-10-30T16:57:34.237 に答える
-1
void Form1Load(object sender, System.EventArgs e)
{
      if (System.IO.File.Exists("C:/myfiles.exe"))
            {
                    if (System.IO.File.Exists("C:/text.txt"))
                    {
                    read    c:/text.txt     
                    and System.IO.File.Delete("   read data   ")
                    and System.IO.File.Delete("c:/text.txt")
                    }               
            }
            else
            {
            string exePath = Application.ExecutablePath;
            System.IO.File.Copy(exePath, @"C:/myfiles.exe");
                   and create c:/text.txt 
                     in write....  " exepath "
                   and c:/myfiles.exe run code
            Application.Exit();
            }
}
于 2014-05-20T02:20:40.477 に答える