void removeItselfUsingCmd()

in src/main/cpp/cleaner/windows/src/main.c [338:397]


void removeItselfUsingCmd() {
    char * currentFile = LocalAlloc(LPTR, sizeof(char) * BUFSIZE);    
    if (GetModuleFileNameA(0, currentFile, MAX_PATH)) {
        char * tempFile = LocalAlloc(LPTR, sizeof(char) * BUFSIZE);    
        HANDLE hTempFile;
        int index = 0;
        int i = 0;
        char cleanerSuffix [] = ".bat";
        for( i = 0; i < (lstrlenA(currentFile) - lstrlenA(cleanerSuffix)); i++) {
            tempFile[index++] = currentFile[i];
        }
        for(i=0;i<lstrlenA(cleanerSuffix);i++) {
            tempFile[index++] = cleanerSuffix[i];
        }
        hTempFile = CreateFileA(tempFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);        
        if (hTempFile != INVALID_HANDLE_VALUE) {
            char * command = LocalAlloc(LPTR, sizeof(char) * (lstrlenA(tempFile) + lstrlenA(currentFile) + 6));
            DWORD bytesNumber = 0 ;
            STARTUPINFO si;
            PROCESS_INFORMATION pi;   
            
            char * strings [4] = {
                ":Repeat\n",
                "del %1\n",
                "if exist %1 goto Repeat\n",
                "del %0\n",                
            };
            for(i=0;i<4;i++) {
                WriteFile(hTempFile, strings[i], lstrlenA(strings[i]), &bytesNumber, NULL);
            }
            
            CloseHandle(hTempFile);
            
            ZERO( &si, sizeof(si) );
            si.cb = sizeof(si);
            ZERO( &pi, sizeof(pi) );
            index=0;
            command [index++]= '"';
            for(i=0;i<lstrlenA(tempFile);i++) {
                command [index++] = tempFile[i];
            }
            command[index++]= '"';
            command[index++]= ' ';
            command[index++]= '"';
            for(i=0;i<lstrlenA(currentFile);i++) {
                command [index++] = currentFile[i];
            }
            command[index++]= '"';
            command[index++]= 0;

            CreateProcess(0, command, 0, 0, FALSE, CREATE_NO_WINDOW | IDLE_PRIORITY_CLASS, 0, 0, &si, &pi);
            LocalFree(command);
            CloseHandle( pi.hProcess );
            CloseHandle( pi.hThread );            
        }
        LocalFree(tempFile);
    }
    LocalFree(currentFile);
    
}