#include #include void Renamer(const char* mask) { char drive[_MAX_DRIVE], path[_MAX_PATH], fname[_MAX_FNAME], ext[_MAX_EXT]; _splitpath(mask, drive, path, NULL, NULL); WIN32_FIND_DATA data; HANDLE hHandle = ::FindFirstFile(mask, &data); BOOL bRunning = hHandle != INVALID_HANDLE_VALUE; while (bRunning) { _splitpath(data.cFileName, NULL, NULL, fname, ext); const char* newext = NULL; if (stricmp(ext, ".ex_") == 0) newext = ".exe"; else if (stricmp(ext, ".dl_") == 0) newext = ".dll"; if (newext != NULL) { char oldpath[_MAX_PATH], newpath[_MAX_PATH]; _makepath(oldpath, drive, path, fname, ext); _makepath(newpath, drive, path, fname, newext); if (::CopyFile(oldpath, newpath, FALSE)) { ::DeleteFile(oldpath); } else { char msg[512]; LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); sprintf(msg, "Impossibile ridenominare il file %s in %s:\n%s", oldpath, newpath, lpMsgBuf); ::LocalFree(lpMsgBuf); ::MessageBox(NULL, msg, "Aggiornamento sistema", MB_ICONERROR | MB_OK); } } bRunning = ::FindNextFile(hHandle, &data); } } int PASCAL WinMain(HINSTANCE, HINSTANCE , LPSTR cmd_line, int) { ::MessageBox(NULL, "Premere OK ed attendere il riavvio del programma", "Aggiornamento sistema", MB_ICONWARNING | MB_OK); ::Sleep(3000); // Apetta qualche secondo che termini ba0.exe Renamer("*.??_"); Renamer("Servers\\*.??_"); int modules_pending = ::GetPrivateProfileInt("ba0close", "ModulesPending", 0, "./campo.ini"); if (modules_pending != 0) { char cmd[256]; strcpy(cmd, "ba1.exe -6 /u"); const char* u = strstr(cmd_line, "/u"); if (u != NULL) strcat(cmd, u+2); else strcat(cmd, "ADMIN"); WinExec(cmd, SW_SHOWNORMAL); } else WinExec("ba0.exe", SW_SHOWNORMAL); return 0; }