• ベストアンサー

アポトーシスのexeファイルを作りたい

いろいろ処理をして自滅するexeファイルを作りたいのですがアクセスを拒否されます この問題をどのように解決したら良いでしょうか? 処理後自分の入っているディレクトリを削除する方法も教えてください gomi.exeは下記ソースのコンパイル出力です #include <stdio.h> #include <conio.h> #include <dir.h> #include <string> #include <iostream> using namespace std; void main(void) {      ・・・・・・・・・・・・・ system("del gomi.exe"); } 結果:アクセスは拒否されました.

質問者が選んだベストアンサー

  • ベストアンサー
noname#4252
noname#4252
回答No.2
nubou
質問者

補足

最後のが簡単そうなのですが void DeleteSelf() を最後に実行すれば良いのでしょうか? void DeleteSelf() ; void main(void) { ......... ......... DeleteSelf(); } とすれば良いのでしょうか? さっそく試してみようとしたのですがコンパイルで Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland gomi7.cpp: エラー E2268 gomi7.cpp 11: 未定義の関数 'countof' を呼び出した(関数 DeleteSelf() ) *** 1 errors in Compile *** というメッセージが出ました なにかインクルードしないといけないのでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.4

BorlandC++は使ったことがないので分かりませんがcountofの部分をsizeofにすればいいと思います。 しかしこのURLにあった方法は >// グズグズしないでさっさと終了 >::ExitProcess(0); この部分に注意する必要があると思います。何らかの原因でExitProcessが間に合わずプロセスが生きている間にコマンドプロンプトが実行され削除できないかもしれませんね。 またこれはまったくのデタラメかもしれませんが終了処理の類がスキップされてしまうため(プログラムの組み方によっては)メモリリークの原因になるかもしれません(デタラメだとてスキップされないなら終了処理で時間を使いすぎて先にコマンドプロンプトが実行される危険があります)。

nubou
質問者

補足

void main(void) { cout<<"start...."<<endl;getch(); DeleteSelf(); } で試したのですが消えませんでした もうひとつのほうで試してみます

すると、全ての回答が全文表示されます。
回答No.3

> なにかインクルードしないといけないのでしょうか? GetModuleFileName, GetEnvironmentVariable の第3引数の意味がわかれば解決策は自明です。

nubou
質問者

お礼

sizeofですね

すると、全ての回答が全文表示されます。
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

要はアンインストールプログラムですよね。 自分が動いている間は自殺することができないので、tmpフォルダに自分自身(exe)をコピーしてそのコピーを実行し自分自身は終了、そしてコピー上のプログラムからフォルダごとオリジナルを削除します。でもtmpにコピーされたexeは削除できませんよね。これはレジストリのrunoneceにdelを記入して再起動時に削除という手順でどうでしょうか?

nubou
質問者

お礼

他に手がないならば再起動時に削除を採用させていただきます どうもありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A