diff --git a/.gitattributes b/.gitattributes index 74286d5..db6e65b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,7 @@ MSICALib/MSITSCA.vcxproj -text svneol=unset#text/xml MSICALib/MSITSCA.vcxproj.filters -text svneol=unset#text/xml MSICALib/MSITSCAOp.cpp -text MSICALib/MSITSCAOp.h -text +MSICALib/Naredi.txt -text MSICALib/StdAfx.cpp -text MSICALib/StdAfx.h -text MSICALib/res/MSITSCA.rc -text svneol=unset#unset diff --git a/MSICALib/MSITSCA.cpp b/MSICALib/MSITSCA.cpp index 211d0ac..53adbaa 100644 --- a/MSICALib/MSITSCA.cpp +++ b/MSICALib/MSITSCA.cpp @@ -115,7 +115,7 @@ UINT MSITSCA_API EvaluateScheduledTasks(MSIHANDLE hInstall) if (iAction >= INSTALLSTATE_LOCAL) { // Installing component. Add the task. PMSIHANDLE hViewTT; - CMSITSCAOpCreateTask *opCreateTask = new CMSITSCAOpCreateTask(sDisplayName, iAction < INSTALLSTATE_LOCAL, MSITSCA_TASK_TICK_SIZE); + CMSITSCAOpCreateTask *opCreateTask = new CMSITSCAOpCreateTask(sDisplayName, MSITSCA_TASK_TICK_SIZE); assert(opCreateTask); // Populate the operation with task's data. diff --git a/MSICALib/MSITSCA.vcxproj b/MSICALib/MSITSCA.vcxproj index 90a8404..6ab70c8 100644 --- a/MSICALib/MSITSCA.vcxproj +++ b/MSICALib/MSITSCA.vcxproj @@ -273,6 +273,7 @@ + diff --git a/MSICALib/MSITSCA.vcxproj.filters b/MSICALib/MSITSCA.vcxproj.filters index a03fa1e..b5960ed 100644 --- a/MSICALib/MSITSCA.vcxproj.filters +++ b/MSICALib/MSITSCA.vcxproj.filters @@ -50,5 +50,6 @@ Resource Files + \ No newline at end of file diff --git a/MSICALib/MSITSCAOp.cpp b/MSICALib/MSITSCAOp.cpp index 73f457d..a3b1df5 100644 --- a/MSICALib/MSITSCAOp.cpp +++ b/MSICALib/MSITSCAOp.cpp @@ -140,8 +140,7 @@ HRESULT CMSITSCAOpMoveFile::Execute(CMSITSCASession *pSession) // CMSITSCAOpCreateTask //////////////////////////////////////////////////////////////////////////// -CMSITSCAOpCreateTask::CMSITSCAOpCreateTask(LPCWSTR pszTaskName, BOOL bForce, int iTicks) : - m_bForce(bForce), +CMSITSCAOpCreateTask::CMSITSCAOpCreateTask(LPCWSTR pszTaskName, int iTicks) : m_dwFlags(0), m_dwPriority(NORMAL_PRIORITY_CLASS), m_wIdleMinutes(0), @@ -173,21 +172,13 @@ HRESULT CMSITSCAOpCreateTask::Execute(CMSITSCASession *pSession) if (MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ACTIONDATA, hRecordMsg) == IDCANCEL) return AtlHresultFromWin32(ERROR_INSTALL_USEREXIT); - // Load the task to see if it exists. - hr = pSession->m_pTaskScheduler->Activate(m_sValue, IID_ITask, (IUnknown**)&pTask); - if (SUCCEEDED(hr)) { - // The task exists. Release it prematurely before proceeding. - pTask.Detach()->Release(); - if (m_bForce) { - // We're supposed to overwrite it. Delete the existing task first. - // Since task deleting is a complicated job (when rollback/commit support is required), and we do have an operation for just that, we use it. - CMSITSCAOpDeleteTask opDeleteTask(m_sValue); - hr = opDeleteTask.Execute(pSession); - if (FAILED(hr)) return hr; - } else { - // The task exists, and we're happy with that. - return S_OK; - } + { + // Delete existing task first. + // Since task deleting is a complicated job (when rollback/commit support is required), and we do have an operation just for that, we use it. + // Don't worry, CMSITSCAOpDeleteTask::Execute() returns S_OK if task doesn't exist. + CMSITSCAOpDeleteTask opDeleteTask(m_sValue); + hr = opDeleteTask.Execute(pSession); + if (FAILED(hr)) return hr; } // Create the new task. diff --git a/MSICALib/MSITSCAOp.h b/MSICALib/MSITSCAOp.h index b40f64d..1af2376 100644 --- a/MSICALib/MSITSCAOp.h +++ b/MSICALib/MSITSCAOp.h @@ -128,7 +128,7 @@ public: class CMSITSCAOpCreateTask : public CMSITSCAOpSingleStringOperation { public: - CMSITSCAOpCreateTask(LPCWSTR pszTaskName = L"", BOOL bForce = FALSE, int iTicks = 0); + CMSITSCAOpCreateTask(LPCWSTR pszTaskName = L"", int iTicks = 0); virtual ~CMSITSCAOpCreateTask(); virtual HRESULT Execute(CMSITSCASession *pSession); @@ -139,7 +139,6 @@ public: friend inline HRESULT operator >>(CAtlFile &f, CMSITSCAOpCreateTask &op); protected: - BOOL m_bForce; CStringW m_sApplicationName; CStringW m_sParameters; CStringW m_sWorkingDirectory; @@ -351,7 +350,6 @@ inline HRESULT operator <<(CAtlFile &f, const CMSITSCAOpCreateTask &op) POSITION pos; hr = f << (const CMSITSCAOpSingleStringOperation&)op; if (FAILED(hr)) return hr; - hr = f << (int)op.m_bForce; if (FAILED(hr)) return hr; hr = f << op.m_sApplicationName; if (FAILED(hr)) return hr; hr = f << op.m_sParameters; if (FAILED(hr)) return hr; hr = f << op.m_sWorkingDirectory; if (FAILED(hr)) return hr; @@ -378,7 +376,6 @@ inline HRESULT operator >>(CAtlFile &f, CMSITSCAOpCreateTask &op) DWORD dwValue; hr = f >> (CMSITSCAOpSingleStringOperation&)op; if (FAILED(hr)) return hr; - hr = f >> (int&)dwValue; if (FAILED(hr)) return hr; op.m_bForce = dwValue ? TRUE : FALSE; hr = f >> op.m_sApplicationName; if (FAILED(hr)) return hr; hr = f >> op.m_sParameters; if (FAILED(hr)) return hr; hr = f >> op.m_sWorkingDirectory; if (FAILED(hr)) return hr; diff --git a/MSICALib/Naredi.txt b/MSICALib/Naredi.txt new file mode 100644 index 0000000..e16b8ef --- /dev/null +++ b/MSICALib/Naredi.txt @@ -0,0 +1,3 @@ +- Dodano opravilo se ne vidi med opravili v Task Scheduler-ju. +- Nadgradnja med odstranitvijo prejšnje verzije, izbriše opravilo, ki ga je nova verzija malo prej namestila. +- Tudi akcije deferred/commit/rollback naj pošiljajo obvestila o napakah.