Dodal sem sporočili o napaki v CMSITSCAOpDeleteFile::Execute() in CMSITSCAOpMoveFile::Execute(). Pri drugih operacijah jih bom dodal, ko bodo dokončane.

This commit is contained in:
Simon Rozman 2012-12-24 12:20:13 +00:00
parent 033454b291
commit a53703ab68
3 changed files with 37 additions and 20 deletions

View File

@ -135,6 +135,8 @@ i2 L0
2551 Pri pripravi seznama razvršèenih opravil je prišlo do napake [2]. 2551 Pri pripravi seznama razvršèenih opravil je prišlo do napake [2].
2552 Pri pisanju v datoteko seznama razporejenih opravil »[2]« je prišlo do napake [3]. 2552 Pri pisanju v datoteko seznama razporejenih opravil »[2]« je prišlo do napake [3].
2553 Pri nastavljanju parametra »[2]« je prišlo do napake [3]. 2553 Pri nastavljanju parametra »[2]« je prišlo do napake [3].
2554 Pri brisanju datoteke »[2]« je prišlo do napake [3].
2555 Pri premikanju datoteke »[2]« v »[3]« je prišlo do napake [4].
<<NOKEEP <<NOKEEP
"De.$(CFG).$(PLAT).Error-2.idt" : "Sl.$(CFG).$(PLAT).Error-2.idtx" "..\res\de_DE.po" "De.$(CFG).$(PLAT).Error-2.idt" : "Sl.$(CFG).$(PLAT).Error-2.idtx" "..\res\de_DE.po"

View File

@ -43,6 +43,8 @@
#define ERROR_INSTALL_SCHEDULED_TASKS_OPLIST_CREATE 2551L #define ERROR_INSTALL_SCHEDULED_TASKS_OPLIST_CREATE 2551L
#define ERROR_INSTALL_SCHEDULED_TASKS_SCRIPT_WRITE 2552L #define ERROR_INSTALL_SCHEDULED_TASKS_SCRIPT_WRITE 2552L
#define ERROR_INSTALL_SCHEDULED_TASKS_PROPERTY_SET 2553L #define ERROR_INSTALL_SCHEDULED_TASKS_PROPERTY_SET 2553L
#define ERROR_INSTALL_DELETE_FAILED 2554L
#define ERROR_INSTALL_MOVE_FAILED 2555L
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -88,21 +88,27 @@ HRESULT CMSITSCAOpDeleteFile::Execute(CMSITSCASession *pSession)
sBackupName.Format(L"%ls (orig %u)", (LPCWSTR)m_sValue, ++uiCount); sBackupName.Format(L"%ls (orig %u)", (LPCWSTR)m_sValue, ++uiCount);
dwError = ::MoveFileW(m_sValue, sBackupName) ? ERROR_SUCCESS : ::GetLastError(); dwError = ::MoveFileW(m_sValue, sBackupName) ? ERROR_SUCCESS : ::GetLastError();
} while (dwError == ERROR_ALREADY_EXISTS); } while (dwError == ERROR_ALREADY_EXISTS);
if (dwError == ERROR_FILE_NOT_FOUND) return S_OK; if (dwError == ERROR_SUCCESS) {
if (dwError != ERROR_SUCCESS) return AtlHresultFromWin32(dwError); // Order rollback action to restore from backup copy.
pSession->m_olRollback.AddHead(new CMSITSCAOpMoveFile(sBackupName, m_sValue));
// Order rollback action to restore from backup copy. // Order commit action to delete backup copy.
pSession->m_olRollback.AddHead(new CMSITSCAOpMoveFile(sBackupName, m_sValue)); pSession->m_olCommit.AddTail(new CMSITSCAOpDeleteFile(sBackupName));
}
// Order commit action to delete backup copy.
pSession->m_olCommit.AddTail(new CMSITSCAOpDeleteFile(sBackupName));
return S_OK;
} else { } else {
// Delete the file. // Delete the file.
if (::DeleteFileW(m_sValue)) return S_OK; dwError = ::DeleteFileW(m_sValue) ? ERROR_SUCCESS : ::GetLastError();
dwError = ::GetLastError(); }
return dwError == ERROR_FILE_NOT_FOUND ? S_OK : AtlHresultFromWin32(dwError);
if (dwError == ERROR_SUCCESS || dwError == ERROR_FILE_NOT_FOUND)
return S_OK;
else {
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
verify(::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_DELETE_FAILED) == ERROR_SUCCESS);
verify(::MsiRecordSetStringW(hRecordProg, 2, m_sValue ) == ERROR_SUCCESS);
verify(::MsiRecordSetInteger(hRecordProg, 3, dwError ) == ERROR_SUCCESS);
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
return AtlHresultFromWin32(dwError);
} }
} }
@ -120,18 +126,25 @@ CMSITSCAOpMoveFile::CMSITSCAOpMoveFile(LPCWSTR pszFileSrc, LPCWSTR pszFileDst, i
HRESULT CMSITSCAOpMoveFile::Execute(CMSITSCASession *pSession) HRESULT CMSITSCAOpMoveFile::Execute(CMSITSCASession *pSession)
{ {
assert(pSession); assert(pSession);
DWORD dwError;
if (pSession->m_bRollbackEnabled) { // Move the file.
// Move the file. dwError = ::MoveFileW(m_sValue1, m_sValue2) ? ERROR_SUCCESS : ::GetLastError();
if (::MoveFileW(m_sValue1, m_sValue2)) { if (dwError == ERROR_SUCCESS) {
if (pSession->m_bRollbackEnabled) {
// Order rollback action to move it back. // Order rollback action to move it back.
pSession->m_olRollback.AddHead(new CMSITSCAOpMoveFile(m_sValue2, m_sValue1)); pSession->m_olRollback.AddHead(new CMSITSCAOpMoveFile(m_sValue2, m_sValue1));
return S_OK; }
} else
return AtlHresultFromLastError(); return S_OK;
} else { } else {
// Move the file. PMSIHANDLE hRecordProg = ::MsiCreateRecord(4);
return ::MoveFileW(m_sValue1, m_sValue2) ? S_OK : AtlHresultFromLastError(); verify(::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_MOVE_FAILED) == ERROR_SUCCESS);
verify(::MsiRecordSetStringW(hRecordProg, 2, m_sValue1 ) == ERROR_SUCCESS);
verify(::MsiRecordSetStringW(hRecordProg, 3, m_sValue2 ) == ERROR_SUCCESS);
verify(::MsiRecordSetInteger(hRecordProg, 4, dwError ) == ERROR_SUCCESS);
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
return AtlHresultFromWin32(dwError);
} }
} }