Changeset 537
- Timestamp:
- 11/13/2008 10:54:09 AM (5 years ago)
- Location:
- branches/eraser6/Installer/Bootstrapper
- Files:
-
- 2 edited
-
Bootstrapper.cpp (modified) (7 diffs)
-
Main.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eraser6/Installer/Bootstrapper/Bootstrapper.cpp
r536 r537 82 82 s->FileRead += readSize; 83 83 84 SetProgress(( double)s->FileRead / s->FileSize);84 SetProgress((float)((double)s->FileRead / s->FileSize)); 85 85 } 86 86 … … 104 104 void ExtractTempFiles(std::wstring pathToExtract) 105 105 { 106 if (std::wstring(L"\\/").find(pathToExtract[pathToExtract.length() - 1]) )106 if (std::wstring(L"\\/").find(pathToExtract[pathToExtract.length() - 1]) == std::wstring::npos) 107 107 pathToExtract += L"\\"; 108 108 … … 159 159 160 160 //Create the output file 161 size_t convertedChars = 0; 161 162 wchar_t fileName[MAX_PATH]; 162 mbstowcs (fileName, f->Name, sizeof(fileName) / sizeof(fileName[0]));163 mbstowcs_s(&convertedChars, fileName, f->Name, sizeof(fileName) / sizeof(fileName[0])); 163 164 HANDLE destFile = CreateFileW((pathToExtract + fileName).c_str(), GENERIC_WRITE, 0, 164 165 NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); … … 231 232 //Get a mutable version of the command line 232 233 wchar_t* cmdLine = new wchar_t[commandLine.length() + 1]; 233 wcscpy (cmdLine, commandLine.c_str());234 wcscpy_s(cmdLine, commandLine.length() + 1, commandLine.c_str()); 234 235 235 236 //Launch the process 236 237 STARTUPINFOW startupInfo; 237 PROCESS_INFORMATION WpInfo;238 PROCESS_INFORMATION pInfo; 238 239 ::ZeroMemory(&startupInfo, sizeof(startupInfo)); 239 240 ::ZeroMemory(&pInfo, sizeof(pInfo)); … … 273 274 274 275 //Get the path to the installer 275 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) )276 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) == std::wstring::npos) 276 277 tempDir += L"\\"; 277 std::wstring commandLine( '"' + tempDir);278 std::wstring commandLine(L'"' + tempDir); 278 279 commandLine += L"dotnetfx.exe\""; 279 280 … … 290 291 SYSTEM_INFO sysInfo; 291 292 ZeroMemory(&sysInfo, sizeof(sysInfo)); 292 sysInfo.cbSize = sizeof(sysInfo);293 293 GetSystemInfo(&sysInfo); 294 294 295 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) )295 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) == std::wstring::npos) 296 296 tempDir += L"\\"; 297 297 switch (sysInfo.wProcessorArchitecture) … … 307 307 308 308 std::wstring commandLine(L"msiexec.exe /i "); 309 commandLine += '"' + tempDir +'"';309 commandLine += L'"' + tempDir + L'"'; 310 310 311 311 //And the return code is true if the process exited with 0. -
branches/eraser6/Installer/Bootstrapper/Main.cpp
r536 r537 57 57 : DirName(dirName) 58 58 { 59 if (std::wstring(L"\\/").find(dirName[dirName.length() - 1]) == std::wstring::npos) 60 dirName += L"\\"; 61 59 62 if (!CreateDirectoryW(dirName.c_str(), NULL)) 60 63 throw GetErrorMessage(GetLastError()); … … 64 67 { 65 68 //Clean up the files in the directory. 66 67 69 WIN32_FIND_DATAW findData; 70 ZeroMemory(&findData, sizeof(findData)); 71 HANDLE findHandle = FindFirstFileW((DirName + L"*").c_str(), &findData); 72 if (findHandle == INVALID_HANDLE_VALUE) 73 throw GetErrorMessage(GetLastError()); 74 75 //Delete! 76 do 77 DeleteFileW((DirName + findData.cFileName).c_str()); 78 while (FindNextFileW(findHandle, &findData)); 79 80 //Clean up. 81 FindClose(findHandle); 68 82 RemoveDirectoryW(DirName.c_str()); 69 83 } … … 155 169 } 156 170 157 case WM_PAINT:158 {159 PAINTSTRUCT ps;160 HDC hdc = BeginPaint(hWnd, &ps);161 162 // TODO: Add any drawing code here...163 EndPaint(hWnd, &ps);164 break;165 }166 167 171 case WM_DESTROY: 168 172 PostQuitMessage(0); … … 207 211 UpdateWindow(hWndParent); 208 212 209 //OK, now we do the hard work. Create a folder to place our payload into 210 wchar_t tempPath[MAX_PATH]; 211 DWORD result = GetTempPathW(sizeof(tempPath) / sizeof(tempPath[0]), tempPath); 212 if (!result) 213 throw GetErrorMessage(GetLastError()); 214 215 std::wstring tempDir(tempPath, result); 216 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) == std::wstring::npos) 217 tempDir += L"\\"; 218 tempDir += L"eraserInstallBootstrapper\\"; 219 TempDir dir(tempDir); 220 ExtractTempFiles(tempDir); 221 222 //Install the .NET framework 223 if (!HasNetFramework()) 224 InstallNetFramework(tempDir); 225 226 //Then install Eraser! 227 InstallEraser(); 228 229 //Main message loop 230 MSG msg; 231 while (GetMessage(&msg, NULL, 0, 0)) 232 { 233 TranslateMessage(&msg); 234 DispatchMessage(&msg); 235 } 236 237 return (int) msg.wParam; 213 try 214 { 215 //OK, now we do the hard work. Create a folder to place our payload into 216 wchar_t tempPath[MAX_PATH]; 217 DWORD result = GetTempPathW(sizeof(tempPath) / sizeof(tempPath[0]), tempPath); 218 if (!result) 219 throw GetErrorMessage(GetLastError()); 220 221 std::wstring tempDir(tempPath, result); 222 if (std::wstring(L"\\/").find(tempDir[tempDir.length() - 1]) == std::wstring::npos) 223 tempDir += L"\\"; 224 tempDir += L"eraserInstallBootstrapper\\"; 225 TempDir dir(tempDir); 226 ExtractTempFiles(tempDir); 227 228 //Install the .NET framework 229 if (!HasNetFramework()) 230 InstallNetFramework(tempDir); 231 232 //Then install Eraser! 233 InstallEraser(tempDir); 234 } 235 catch (const std::wstring& e) 236 { 237 MessageBoxW(GetTopWindow(), e.c_str(), L"Eraser Setup", MB_OK | MB_ICONERROR); 238 } 239 240 return 0; 238 241 } 239 242 … … 265 268 MSG msg; 266 269 while (PeekMessage(&msg, (HWND)0, 0, 0, PM_NOREMOVE) && msg.message != WM_QUIT) 267 { 270 { 271 if (GetMessageW(&msg, NULL, 0, 0) == 0) 272 return; 273 268 274 TranslateMessage(&msg); 269 275 DispatchMessage(&msg); 270 }276 } 271 277 } 272 278
Note: See TracChangeset
for help on using the changeset viewer.
