最近、私はここでS.O.ファイルの実行後にファイルを削除するための解決方法があると主張し、そのためにいくつかのコードを提供しています。CからC++への変換を避ける<strsafe.h>
次に、C言語で書かれたstrsafe.hというライブラリを使用しました。これはVisualライブラリであり、C++では動作しない他のフォーラムでも読んでいます。
このコードをC++で使用するための実用的なソリューションはありますか?どんな助けもありがとう。
#include <Windows.h>
#include <strsafe.h>
#define SELF_REMOVE_STRING TEXT("cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del \"%s\"")
void DelMe()
{
TCHAR szModuleName[MAX_PATH];
TCHAR szCmd[2 * MAX_PATH];
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
GetModuleFileName(NULL, szModuleName, MAX_PATH);
StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);
CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
void main()
{
/* Do what you need */
/* Call this function at the very end of your program to delete itself */
DelMe();
}
このコードは、WindowsであればC++でも正常に動作します。しかし、あなたが ''なしでそれをすることについて言及しなかったので、私はそれが問題ではないと仮定します。 –
@BenjaminLindleyはい私はそれがWindowsのためのものだと知っていますが、strsafe.hのためにコンパイルできません。 –
このコード(またはむしろ "such")のコード*は、*要求するページ*ディスク上のバイナリファイル。このようなシステムでは、プロセスがそこから実行されているときにファイルをロックする必要があります。なぜなら、アクセス可能な状態に保つ必要があり、後でページインするためにその完全性を確保するからです。 – tofro