Я использую следующий код для этого (извините, что на С, просто лень переводить):
Код | char modulename[MAX_PATH]; char batfile[MAX_PATH]; char batlines[MAX_PATH*4]; LPSTR tempdir; char Buf[MAX_PATH];
GetModuleFileName(NULL,modulename,MAX_PATH);
tempdir = ((pGetEnvironmentVariable(TEXT("TEMP"), Buf, MAX_PATH) > 0) ? Buf : NULL);
lstrcpy(batfile,tempdir); lstrcat(batfile,"\\"); lstrcat(batfile,"delself.bat"); lstrcpy(batlines,"@echo off\15\12:try\15\12del "); lstrcat(batlines,modulename); lstrcat(batlines,"\15\12if exist "); lstrcat(batlines,modulename); lstrcat(batlines," goto try\15\12"); lstrcat(batlines,"del "); lstrcat(batlines,batfile); lstrcat(batlines,"\15\12");
DWORD NOfBytes; HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hbf,batlines,plstrlen(batlines),&NOfBytes, NULL); CloseHandle(hbf);
STARTUPINFO si; PROCESS_INFORMATION pi; NEWAPI_ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW;
CreateProcess( NULL, batfile, NULL, NULL, FALSE, IDLE_PRIORITY_CLASS|DETACHED_PROCESS, NULL, NULL, &si, &pi);
ExitProcess(NULL);
|
Взято с какогото сайта, но у них там батник криво создается и не работает. Мне пришлось исправлять |