Dodal sem podporo za nameščanje in odstranjevanje certifikatov.
This commit is contained in:
parent
6dda602dd3
commit
fcbb7bb3c9
@ -89,3 +89,11 @@ msgid ""
|
||||
msgstr ""
|
||||
"Pri premikanju datoteke »[2]« v »[3]« je prišlo do napake [4]. Obrnite se na "
|
||||
"svojo tehnično službo."
|
||||
|
||||
#: ..\msm/Sl.DebugU.Win32.Error-2.idtx:4
|
||||
msgid ""
|
||||
"Error [2] creating scheduled task list. Please, contact your support "
|
||||
"personnel."
|
||||
msgstr ""
|
||||
"Pri pripravi seznama razvrščenih opravil je prišlo do napake [2]. Obrnite se "
|
||||
"na svojo tehnično službo."
|
||||
|
@ -12,10 +12,11 @@
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Error codes (next unused 2569L)
|
||||
// Error codes (next unused 2571L)
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define ERROR_INSTALL_DATABASE_OPEN 2550L
|
||||
#define ERROR_INSTALL_OPLIST_CREATE 2551L
|
||||
#define ERROR_INSTALL_PROPERTY_SET 2553L
|
||||
#define ERROR_INSTALL_SCRIPT_WRITE 2552L
|
||||
#define ERROR_INSTALL_SCRIPT_READ 2560L
|
||||
@ -33,9 +34,8 @@
|
||||
#define ERROR_INSTALL_TASK_DELETE_FAILED 2557L
|
||||
#define ERROR_INSTALL_TASK_ENABLE_FAILED 2558L
|
||||
#define ERROR_INSTALL_TASK_COPY_FAILED 2559L
|
||||
|
||||
// Errors reported by MSITSCA
|
||||
#define ERROR_INSTALL_SCHEDULED_TASKS_OPLIST_CREATE 2551L
|
||||
#define ERROR_INSTALL_CERT_INSTALL_FAILED 2569L
|
||||
#define ERROR_INSTALL_CERT_REMOVE_FAILED 2570L
|
||||
|
||||
|
||||
namespace MSICA {
|
||||
@ -443,6 +443,18 @@ public:
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// COpCertRemove
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class COpCertRemove : public COpCert
|
||||
{
|
||||
public:
|
||||
COpCertRemove(LPCVOID lpCert = NULL, SIZE_T nSize = 0, LPCWSTR pszStore = L"", DWORD dwEncodingType = 0, DWORD dwFlags = 0, int iTicks = 0);
|
||||
virtual HRESULT Execute(CSession *pSession);
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// COpList
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@ -476,6 +488,8 @@ protected:
|
||||
OP_TASK_DELETE,
|
||||
OP_TASK_ENABLE,
|
||||
OP_TASK_COPY,
|
||||
OP_CERT_INSTALL,
|
||||
OP_CERT_REMOVE,
|
||||
OP_SUBLIST
|
||||
};
|
||||
|
||||
@ -775,6 +789,34 @@ inline UINT MsiGetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder, ATL::CAtlStr
|
||||
}
|
||||
|
||||
|
||||
inline DWORD CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, ATL::CAtlStringA &sNameString)
|
||||
{
|
||||
// Query the final string length first.
|
||||
DWORD dwSize = ::CertGetNameStringA(pCertContext, dwType, dwFlags, pvTypePara, NULL, 0);
|
||||
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPSTR szBuffer = sNameString.GetBuffer(dwSize);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
dwSize = ::CertGetNameStringA(pCertContext, dwType, dwFlags, pvTypePara, szBuffer, dwSize);
|
||||
sNameString.ReleaseBuffer(dwSize);
|
||||
return dwSize;
|
||||
}
|
||||
|
||||
|
||||
inline DWORD CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, ATL::CAtlStringW &sNameString)
|
||||
{
|
||||
// Query the final string length first.
|
||||
DWORD dwSize = ::CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara, NULL, 0);
|
||||
|
||||
// Prepare the buffer to format the string data into and read it.
|
||||
LPWSTR szBuffer = sNameString.GetBuffer(dwSize);
|
||||
if (!szBuffer) return ERROR_OUTOFMEMORY;
|
||||
dwSize = ::CertGetNameStringW(pCertContext, dwType, dwFlags, pvTypePara, szBuffer, dwSize);
|
||||
sNameString.ReleaseBuffer(dwSize);
|
||||
return dwSize;
|
||||
}
|
||||
|
||||
|
||||
namespace MSICA {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@ -1340,6 +1382,10 @@ inline HRESULT operator <<(ATL::CAtlFile &f, const COpList &list)
|
||||
hr = list.Save<COpTaskEnable, COpList::OP_TASK_ENABLE>(f, pOp);
|
||||
else if (dynamic_cast<const COpTaskCopy*>(pOp))
|
||||
hr = list.Save<COpTaskCopy, COpList::OP_TASK_COPY>(f, pOp);
|
||||
else if (dynamic_cast<const COpCertInstall*>(pOp))
|
||||
hr = list.Save<COpCertInstall, COpList::OP_CERT_INSTALL>(f, pOp);
|
||||
else if (dynamic_cast<const COpCertRemove*>(pOp))
|
||||
hr = list.Save<COpCertRemove, COpList::OP_CERT_REMOVE>(f, pOp);
|
||||
else if (dynamic_cast<const COpList*>(pOp))
|
||||
hr = list.Save<COpList, COpList::OP_SUBLIST>(f, pOp);
|
||||
else {
|
||||
@ -1411,6 +1457,12 @@ inline HRESULT operator >>(ATL::CAtlFile &f, COpList &list)
|
||||
case COpList::OP_TASK_COPY:
|
||||
hr = list.LoadAndAddTail<COpTaskCopy>(f);
|
||||
break;
|
||||
case COpList::OP_CERT_INSTALL:
|
||||
hr = list.LoadAndAddTail<COpCertInstall>(f);
|
||||
break;
|
||||
case COpList::OP_CERT_REMOVE:
|
||||
hr = list.LoadAndAddTail<COpCertRemove>(f);
|
||||
break;
|
||||
case COpList::OP_SUBLIST:
|
||||
hr = list.LoadAndAddTail<COpList>(f);
|
||||
break;
|
||||
|
@ -36,7 +36,7 @@
|
||||
<ClInclude Include="stdafx.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="res\en_GB.po" />
|
||||
<None Include="L10N\sl_SI.po" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{8552EE55-177E-4F51-B51B-BAF7D6462CDE}</ProjectGuid>
|
||||
|
@ -43,7 +43,7 @@
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="res\en_GB.po">
|
||||
<None Include="L10N\sl_SI.po">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
@ -40,7 +40,122 @@ COpCertInstall::COpCertInstall(LPCVOID lpCert, SIZE_T nSize, LPCWSTR pszStore, D
|
||||
|
||||
HRESULT COpCertInstall::Execute(CSession *pSession)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
DWORD dwError;
|
||||
HCERTSTORE hCertStore;
|
||||
|
||||
// Open certificate store.
|
||||
hCertStore = ::CertOpenStore(CERT_STORE_PROV_SYSTEM_W, m_dwEncodingType, NULL, m_dwFlags, m_sValue);
|
||||
if (hCertStore) {
|
||||
// Create certificate context.
|
||||
PCCERT_CONTEXT pCertContext = ::CertCreateCertificateContext(m_dwEncodingType, m_binCert.GetData(), (DWORD)(m_binCert.GetCount()));
|
||||
if (pCertContext) {
|
||||
PMSIHANDLE hRecordMsg = ::MsiCreateRecord(1);
|
||||
ATL::CAtlStringW sCertName;
|
||||
|
||||
// Display our custom message in the progress bar.
|
||||
::CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, sCertName);
|
||||
::MsiRecordSetStringW(hRecordMsg, 1, sCertName);
|
||||
if (MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ACTIONDATA, hRecordMsg) == IDCANCEL)
|
||||
return AtlHresultFromWin32(ERROR_INSTALL_USEREXIT);
|
||||
|
||||
// Add certificate to certificate store.
|
||||
if (::CertAddCertificateContextToStore(hCertStore, pCertContext, CERT_STORE_ADD_NEW, NULL)) {
|
||||
if (pSession->m_bRollbackEnabled) {
|
||||
// Order rollback action to delete the certificate.
|
||||
pSession->m_olRollback.AddHead(new COpCertRemove(m_binCert.GetData(), m_binCert.GetCount(), m_sValue, m_dwEncodingType, m_dwFlags));
|
||||
}
|
||||
dwError = ERROR_SUCCESS;
|
||||
} else {
|
||||
dwError = ::GetLastError();
|
||||
if (dwError == CRYPT_E_EXISTS) {
|
||||
// Certificate store already contains given certificate. Nothing to install then.
|
||||
dwError = ERROR_SUCCESS;
|
||||
}
|
||||
}
|
||||
::CertFreeCertificateContext(pCertContext);
|
||||
} else
|
||||
dwError = ::GetLastError();
|
||||
::CertCloseStore(hCertStore, 0);
|
||||
} else
|
||||
dwError = ::GetLastError();
|
||||
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
return S_OK;
|
||||
else {
|
||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_INSTALL_FAILED);
|
||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||
return AtlHresultFromWin32(dwError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// COpCertRemove
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
COpCertRemove::COpCertRemove(LPCVOID lpCert, SIZE_T nSize, LPCWSTR pszStore, DWORD dwEncodingType, DWORD dwFlags, int iTicks) : COpCert(lpCert, nSize, pszStore, dwEncodingType, dwFlags, iTicks)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
HRESULT COpCertRemove::Execute(CSession *pSession)
|
||||
{
|
||||
DWORD dwError;
|
||||
HCERTSTORE hCertStore;
|
||||
|
||||
// Open certificate store.
|
||||
hCertStore = ::CertOpenStore(CERT_STORE_PROV_SYSTEM_W, m_dwEncodingType, NULL, m_dwFlags, m_sValue);
|
||||
if (hCertStore) {
|
||||
// Create certificate context.
|
||||
PCCERT_CONTEXT pCertContext = ::CertCreateCertificateContext(m_dwEncodingType, m_binCert.GetData(), (DWORD)(m_binCert.GetCount()));
|
||||
if (pCertContext) {
|
||||
PMSIHANDLE hRecordMsg = ::MsiCreateRecord(1);
|
||||
ATL::CAtlStringW sCertName;
|
||||
PCCERT_CONTEXT pCertContextExisting;
|
||||
|
||||
// Display our custom message in the progress bar.
|
||||
::CertGetNameStringW(pCertContext, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, sCertName);
|
||||
::MsiRecordSetStringW(hRecordMsg, 1, sCertName);
|
||||
if (MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ACTIONDATA, hRecordMsg) == IDCANCEL)
|
||||
return AtlHresultFromWin32(ERROR_INSTALL_USEREXIT);
|
||||
|
||||
pCertContextExisting = ::CertFindCertificateInStore(hCertStore, m_dwEncodingType, 0, CERT_FIND_EXISTING, pCertContext, NULL);
|
||||
if (pCertContextExisting) {
|
||||
// Delete certificate from certificate store.
|
||||
if (::CertDeleteCertificateFromStore(pCertContextExisting)) {
|
||||
if (pSession->m_bRollbackEnabled) {
|
||||
// Order rollback action to reinstall the certificate.
|
||||
pSession->m_olRollback.AddHead(new COpCertInstall(m_binCert.GetData(), m_binCert.GetCount(), m_sValue, m_dwEncodingType, m_dwFlags));
|
||||
}
|
||||
dwError = ERROR_SUCCESS;
|
||||
} else {
|
||||
dwError = ::GetLastError();
|
||||
::CertFreeCertificateContext(pCertContextExisting);
|
||||
}
|
||||
} else {
|
||||
// We haven't found the certificate. Nothing to delete then.
|
||||
dwError = ERROR_SUCCESS;
|
||||
}
|
||||
::CertFreeCertificateContext(pCertContext);
|
||||
} else
|
||||
dwError = ::GetLastError();
|
||||
::CertCloseStore(hCertStore, 0);
|
||||
} else
|
||||
dwError = ::GetLastError();
|
||||
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
return S_OK;
|
||||
else {
|
||||
PMSIHANDLE hRecordProg = ::MsiCreateRecord(3);
|
||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_CERT_REMOVE_FAILED);
|
||||
::MsiRecordSetStringW(hRecordProg, 2, m_sValue );
|
||||
::MsiRecordSetInteger(hRecordProg, 3, dwError );
|
||||
::MsiProcessMessage(pSession->m_hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||
return AtlHresultFromWin32(dwError);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace MSICA
|
||||
|
@ -25,6 +25,7 @@ Error Message
|
||||
i2 L0
|
||||
1252 Error Error
|
||||
2550 Error opening installation package. Please, contact your support personnel.
|
||||
2551 Error [2] creating scheduled task list. Please, contact your support personnel.
|
||||
2552 Error [3] writing to "[2]" task list file. Please, contact your support personnel.
|
||||
2560 Error [3] reading from "[2]" task list file. Please, contact your support personnel.
|
||||
2553 Error [3] setting "[2]" parameter. Please, contact your support personnel.
|
||||
@ -34,6 +35,8 @@ i2 L0
|
||||
2557 Error [3] deleting "[2]" scheduled task. Please, contact your support personnel.
|
||||
2558 Error [3] enabling/disabling "[2]" scheduled task. Please, contact your support personnel.
|
||||
2559 Error [4] copying "[2]" scheduled task to "[3]". Please, contact your support personnel.
|
||||
2569 Error [3] installing certificate to certificate store "[2]". Please, contact your support personnel.
|
||||
2570 Error [3] removing certificate from certificate store "[2]". Please, contact your support personnel.
|
||||
<<NOKEEP
|
||||
|
||||
"De.$(CFG).$(PLAT).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\de_DE.po"
|
||||
|
@ -68,14 +68,6 @@ msgstr "SUBLANG_DEFAULT"
|
||||
msgid "Copyright © Amebis, d. o. o., Kamnik, 2012"
|
||||
msgstr "Vse pravice pridržane © Amebis, d. o. o., Kamnik, 2012"
|
||||
|
||||
#: ..\msm/Sl.DebugU.Win32.Error-2.idtx:4
|
||||
msgid ""
|
||||
"Error [2] creating scheduled task list. Please, contact your support "
|
||||
"personnel."
|
||||
msgstr ""
|
||||
"Pri pripravi seznama razvrščenih opravil je prišlo do napake [2]. Obrnite se "
|
||||
"na svojo tehnično službo."
|
||||
|
||||
#: ..\msm/Sl.DebugU.Win32.ActionText-2.idtx:4
|
||||
msgid "Scheduled task: [1]"
|
||||
msgstr "Razporejeno opravilo: [1]"
|
||||
|
@ -198,7 +198,7 @@ UINT MSICATS_API EvaluateScheduledTasks(MSIHANDLE hInstall)
|
||||
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||
}
|
||||
} else if (uiResult != ERROR_INSTALL_USEREXIT) {
|
||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_SCHEDULED_TASKS_OPLIST_CREATE);
|
||||
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_OPLIST_CREATE);
|
||||
::MsiRecordSetInteger(hRecordProg, 2, uiResult );
|
||||
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
|
||||
}
|
||||
|
@ -114,33 +114,6 @@ CommitScheduledTasks 3585 binMSICATS.dll InstallScheduledTasks
|
||||
<<NOKEEP
|
||||
|
||||
|
||||
######################################################################
|
||||
# Error
|
||||
|
||||
All :: "$(LANG).$(PLAT).$(CFG).Error-2.idt"
|
||||
|
||||
"En.$(PLAT).$(CFG).Error-2.idtx" : "Makefile" ""..\..\include\MSIBuildCfg.mak""
|
||||
-if exist $@ del /f /q $@
|
||||
move /y << $@ > NUL
|
||||
Error Message
|
||||
i2 L0
|
||||
1250 Error Error
|
||||
2551 Error [2] creating scheduled task list. Please, contact your support personnel.
|
||||
<<NOKEEP
|
||||
|
||||
"De.$(CFG).$(PLAT).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\de_DE.po"
|
||||
rcxgettext.exe idtp $@ $**
|
||||
|
||||
"En.$(PLAT).$(CFG).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx"
|
||||
copy /y $** $@ > NUL
|
||||
|
||||
"It.$(CFG).$(PLAT).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\it_IT.po"
|
||||
rcxgettext.exe idtp $@ $**
|
||||
|
||||
"Sl.$(CFG).$(PLAT).Error-2.idt" : "En.$(PLAT).$(CFG).Error-2.idtx" "..\L10N\sl_SI.po"
|
||||
rcxgettext.exe idtp $@ $**
|
||||
|
||||
|
||||
######################################################################
|
||||
# InstallExecuteSequence
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user