Projekta MSICATS in MSICACert sem združil v MSICA, ker sta tako ali tako vsebovala kodo drug od drugega (95 % kode je bilo iz skupne knjižnice MSICALib.

This commit is contained in:
Simon Rozman 2014-03-20 12:45:03 +00:00
parent b4750608b3
commit 5aabd7a036
28 changed files with 261 additions and 812 deletions

36
.gitattributes vendored
View File

@ -1,17 +1,17 @@
* text=auto !eol
/MSICA.sln svneol=CRLF#text/plain eol=crlf
MSICACert/L10N/sl_SI.po -text
MSICACert/MSIBuild/Makefile -text
MSICACert/MSIBuild/build_all.bat -text
MSICACert/MSIBuild/clean_all.bat -text
MSICACert/MSICACert.cpp -text
MSICACert/MSICACert.h -text
MSICACert/MSICACert.vcxproj -text svneol=unset#text/xml
MSICACert/MSICACert.vcxproj.filters -text svneol=unset#text/xml
MSICACert/res/MSICACert.rc -text svneol=unset#unset
MSICACert/res/MSICACert.rcx -text svneol=unset#unset
MSICACert/stdafx.cpp -text
MSICACert/stdafx.h -text
MSICA/L10N/sl_SI.po -text
MSICA/MSIBuild/Makefile -text
MSICA/MSIBuild/build_all.bat -text
MSICA/MSIBuild/clean_all.bat -text
MSICA/MSICA.cpp -text
MSICA/MSICA.h -text
MSICA/MSICA.vcxproj -text svneol=unset#text/xml
MSICA/MSICA.vcxproj.filters -text svneol=unset#text/xml
MSICA/res/MSICA.rc -text svneol=unset#unset
MSICA/res/MSICA.rcx -text svneol=unset#unset
MSICA/stdafx.cpp -text
MSICA/stdafx.h -text
MSICALib/L10N/sl_SI.po -text
MSICALib/MSIBuild/Makefile -text
MSICALib/MSIBuild/build_all.bat -text
@ -27,18 +27,6 @@ MSICALib/OpSvc.cpp -text
MSICALib/OpTS.cpp -text
MSICALib/stdafx.cpp -text
MSICALib/stdafx.h -text
MSICATS/L10N/sl_SI.po -text
MSICATS/MSIBuild/Makefile -text
MSICATS/MSIBuild/build_all.bat -text
MSICATS/MSIBuild/clean_all.bat -text
MSICATS/MSICATS.cpp -text
MSICATS/MSICATS.h -text
MSICATS/MSICATS.vcxproj -text svneol=unset#text/xml
MSICATS/MSICATS.vcxproj.filters -text svneol=unset#text/xml
MSICATS/res/MSICATS.rc -text svneol=unset#unset
MSICATS/res/MSICATS.rcx -text svneol=unset#unset
MSICATS/stdafx.cpp -text
MSICATS/stdafx.h -text
include/Debug.props -text svneol=unset#text/xml
include/Release.props -text svneol=unset#text/xml
include/Win32.props -text svneol=unset#text/xml

36
.gitignore vendored
View File

@ -1,18 +1,18 @@
/*.opensdf
/*.sdf
/*.suo
MSICACert/*.user
MSICACert/L10N/*.mo
MSICACert/MSIBuild/*-1.idt
MSICACert/MSIBuild/*-2.idt
MSICACert/MSIBuild/*-2.idtx
MSICACert/MSIBuild/*.Binary-1
MSICACert/MSIBuild/*.Binary-2
MSICACert/MSIBuild/*.Icon-1
MSICACert/MSIBuild/*.Icon-2
MSICACert/MSIBuild/*.lst
MSICACert/MSIBuild/*.msm
MSICACert/temp
MSICA/*.user
MSICA/L10N/*.mo
MSICA/MSIBuild/*-1.idt
MSICA/MSIBuild/*-2.idt
MSICA/MSIBuild/*-2.idtx
MSICA/MSIBuild/*.Binary-1
MSICA/MSIBuild/*.Binary-2
MSICA/MSIBuild/*.Icon-1
MSICA/MSIBuild/*.Icon-2
MSICA/MSIBuild/*.lst
MSICA/MSIBuild/*.msm
MSICA/temp
MSICALib/*.user
MSICALib/L10N/*.mo
MSICALib/MSIBuild/*-1.idt
@ -25,17 +25,5 @@ MSICALib/MSIBuild/*.Icon-2
MSICALib/MSIBuild/*.lst
MSICALib/MSIBuild/*.msm
MSICALib/temp
MSICATS/*.user
MSICATS/L10N/*.mo
MSICATS/MSIBuild/*-1.idt
MSICATS/MSIBuild/*-2.idt
MSICATS/MSIBuild/*-2.idtx
MSICATS/MSIBuild/*.Binary-1
MSICATS/MSIBuild/*.Binary-2
MSICATS/MSIBuild/*.Icon-1
MSICATS/MSIBuild/*.Icon-2
MSICATS/MSIBuild/*.lst
MSICATS/MSIBuild/*.msm
MSICATS/temp
/ipch
/output

View File

@ -3,15 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MSICALib", "MSICALib\MSICALib.vcxproj", "{8552EE55-177E-4F51-B51B-BAF7D6462CDE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MSICATS", "MSICATS\MSICATS.vcxproj", "{A7D9EBC1-1E64-4399-9C88-6692F8742153}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MSICA", "MSICA\MSICA.vcxproj", "{A7D9EBC1-1E64-4399-9C88-6692F8742153}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F3D5C008-7728-49CA-84F1-12C186FC87F8}"
ProjectSection(SolutionItems) = preProject
include\version.h = include\version.h
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MSICACert", "MSICACert\MSICACert.vcxproj", "{0379563D-9835-44AC-928E-24D4E316CE5D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@ -36,14 +34,6 @@ Global
{A7D9EBC1-1E64-4399-9C88-6692F8742153}.Release|Win32.Build.0 = Release|Win32
{A7D9EBC1-1E64-4399-9C88-6692F8742153}.Release|x64.ActiveCfg = Release|x64
{A7D9EBC1-1E64-4399-9C88-6692F8742153}.Release|x64.Build.0 = Release|x64
{0379563D-9835-44AC-928E-24D4E316CE5D}.Debug|Win32.ActiveCfg = Debug|Win32
{0379563D-9835-44AC-928E-24D4E316CE5D}.Debug|Win32.Build.0 = Debug|Win32
{0379563D-9835-44AC-928E-24D4E316CE5D}.Debug|x64.ActiveCfg = Debug|x64
{0379563D-9835-44AC-928E-24D4E316CE5D}.Debug|x64.Build.0 = Debug|x64
{0379563D-9835-44AC-928E-24D4E316CE5D}.Release|Win32.ActiveCfg = Release|Win32
{0379563D-9835-44AC-928E-24D4E316CE5D}.Release|Win32.Build.0 = Release|Win32
{0379563D-9835-44AC-928E-24D4E316CE5D}.Release|x64.ActiveCfg = Release|x64
{0379563D-9835-44AC-928E-24D4E316CE5D}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: MSICATS\n"
"Project-Id-Version: MSICA\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-14 11:12+0100\n"
"POT-Creation-Date: 2014-03-20 13:36+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
@ -20,19 +20,19 @@ msgstr ""
# Language Code and Windows Charset (hexadecimal)
# If we do not intend to provide different localization of same base language (like merging Portugal Portugeese and Brasil Portugese into the same Portugeese), use the code of Microsoft defined default sublanguage.
# For example: Use LANG_PORTUGUESE + SUBLANG_DEFAULT = 0x416, although 0x416 represents Brasil Portugese (too).
#: res/MSICATS.rcx:42
#: res/MSICA.rcx:42
msgid "040904e4"
msgstr "042404e2"
# Language Code (hexadecimal)
# If we do not intend to provide different localization of same base language (like merging Portugal Portugeese and Brasil Portugese into the same Portugeese), use the code of Microsoft defined default sublanguage.
# For example: Use LANG_PORTUGUESE + SUBLANG_DEFAULT = 0x416, although 0x416 represents Brasil Portugese (too).
#: res/MSICATS.rcx:60
#: res/MSICA.rcx:60
msgid "0x409"
msgstr "0x424"
# Windows charset for this language (decimal)
#: res/MSICATS.rcx:60 MSIBuild/En.Win32.Debug.ActionText-2.idtx:3
#: res/MSICA.rcx:60 MSIBuild/En.Win32.Debug.ActionText-2.idtx:3
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:3
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:3
#: MSIBuild/En.x64.Release.ActionText-2.idtx:3
@ -40,37 +40,33 @@ msgid "1252"
msgstr "1250"
# The name of the constant in RC to include the resources in this language.
#: res/MSICATS.rcx:41 res/MSICATS.rcx:59 res/MSICATS.rcx:75
#: res/MSICA.rcx:41 res/MSICA.rcx:59 res/MSICA.rcx:75
msgid "AFX_TARG_ENU"
msgstr "AFX_TARG_SLV"
#: res/MSICATS.rcx:44
#: res/MSICA.rcx:44
msgid "Amebis, d. o. o., Kamnik"
msgstr "Amebis, d. o. o., Kamnik"
#: res/MSICATS.rcx:48
#: res/MSICA.rcx:48
msgid "Copyright © Amebis, d. o. o., Kamnik, 2012"
msgstr "Vse pravice pridržane © Amebis, d. o. o., Kamnik, 2012"
#: res/MSICA.rcx:45
msgid "Installation Support Library"
msgstr "Podporna knjižnica za namestitve"
# Language Identifier (see http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx)
#: res/MSICATS.rcx:77
#: res/MSICA.rcx:77
msgid "LANG_ENGLISH"
msgstr "LANG_SLOVENIAN"
#: res/MSICATS.rcx:49
#: res/MSICA.rcx:47 res/MSICA.rcx:49
msgid "MSICA"
msgstr "MSICA"
#: res/MSICATS.rcx:47
msgid "MSICATS"
msgstr "MSICATS"
#: res/MSICATS.rcx:45
msgid "Scheduled Task Installation Support Library"
msgstr "Podporna knjižnica za nameščanje načrtovanih opravil"
# Sublanguage Identifier (see http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx)
#: res/MSICATS.rcx:77
#: res/MSICA.rcx:77
msgid "SUBLANG_DEFAULT"
msgstr "SUBLANG_DEFAULT"
@ -78,12 +74,32 @@ msgstr "SUBLANG_DEFAULT"
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
#: MSIBuild/En.x64.Release.ActionText-2.idtx:4
msgid "Registering scheduled tasks"
msgstr "Registracija razporejenih opravil"
msgid "Certificate: [1]"
msgstr "Digitalno potrdilo: [1]"
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:4
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
#: MSIBuild/En.x64.Release.ActionText-2.idtx:4
msgid "Installing certificates"
msgstr "Nameščanje digitalnih potrdil"
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:5
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:5
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:5
#: MSIBuild/En.x64.Release.ActionText-2.idtx:5
msgid "Registering scheduled tasks"
msgstr "Registracija razporejenih opravil"
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:5
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:5
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:5
#: MSIBuild/En.x64.Release.ActionText-2.idtx:5
msgid "Scheduled task: [1]"
msgstr "Razporejeno opravilo: [1]"
#~ msgid "Scheduled Task Installation Support Library"
#~ msgstr "Podporna knjižnica za nameščanje načrtovanih opravil"
#~ msgid "MSICACert"
#~ msgstr "MSICACert"

View File

@ -14,6 +14,13 @@ All :: "$(LANG).$(PLAT).$(CFG)._Validation-1.idt"
Table Column Nullable MinValue MaxValue KeyTable KeyColumn Category Set Description
s32 s32 s4 I4 I4 S255 I2 S32 S255 S255
_Validation Table Column
Certificate Certificate N Identifier Primary key, non-localized token.
Certificate Store N Formatted MY;Root;Trust;CA Certificate store name for CertOpenStore() function call. The store provider is always CERT_STORE_PROV_SYSTEM. Therefore, possible values are: MY, Root, Trust, or CA.
Certificate Flags N DoubleInteger Flags for CertOpenStore() function call.
Certificate Encoding N DoubleInteger 0;1;65536;65537 Certificate encoding (combination of X509_ASN_ENCODING(1) and PKCS_7_ASN_ENCODING(65536) flags).
Certificate Binary_ N Binary 1 Identifier The certificate file. The binary information is looked up from the Binary Table.
Certificate Condition Y Condition Optional expression which skips the certificate if evaluates to expFalse. If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.
Certificate Component_ N Component 1 Identifier Component the certificate is part of.
ScheduledTask Task N Identifier Primary key, non-localized token.
ScheduledTask DisplayName N Formatted Task name.
ScheduledTask Application N Formatted Task application name.
@ -60,6 +67,7 @@ All :: "$(LANG).$(PLAT).$(CFG).ActionText-2.idt"
Action Description Template
s$(MSIBUILD_LENGTH_ID) L0 L0
1252 ActionText Action
InstallCertificates Installing certificates Certificate: [1]
InstallScheduledTasks Registering scheduled tasks Scheduled task: [1]
<<NOKEEP
@ -81,7 +89,7 @@ InstallScheduledTasks Registering scheduled tasks Scheduled task: [1]
All :: \
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" \
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICATS.dll"
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICA.dll"
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak" "$(LANG).$(PLAT).$(CFG).Binary-1"
-if exist $@ del /f /q $@
@ -89,13 +97,27 @@ All :: \
Name Data
s$(MSIBUILD_LENGTH_ID) v0
Binary Name
binMSICATS.dll MSICATS.dll
binMSICA.dll MSICA.dll
<<NOKEEP
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICATS.dll" : "..\..\output\$(PLAT).$(CFG)\MSICATS.dll"
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICA.dll" : "..\..\output\$(PLAT).$(CFG)\MSICA.dll"
copy /y $** $@ > NUL
######################################################################
# Certificate
All :: "$(LANG).$(PLAT).$(CFG).Certificate-1.idt"
"$(LANG).$(PLAT).$(CFG).Certificate-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Certificate Store Flags Encoding Binary_ Condition Component_
s$(MSIBUILD_LENGTH_ID) s255 i4 i4 s$(MSIBUILD_LENGTH_ID) S255 s$(MSIBUILD_LENGTH_ID)
Certificate Certificate
<<NOKEEP
######################################################################
# CustomAction
@ -107,10 +129,14 @@ All :: "$(LANG).$(PLAT).$(CFG).CustomAction-1.idt"
Action Type Source Target
s$(MSIBUILD_LENGTH_ID) i2 S$(MSIBUILD_LENGTH_ID) S255
CustomAction Action
EvaluateScheduledTasks 1 binMSICATS.dll EvaluateSequence
InstallScheduledTasks 3073 binMSICATS.dll ExecuteSequence
RollbackScheduledTasks 3329 binMSICATS.dll ExecuteSequence
CommitScheduledTasks 3585 binMSICATS.dll ExecuteSequence
EvaluateCertificates 1 binMSICACert.dll EvaluateCertificates
InstallCertificates 3073 binMSICACert.dll ExecuteSequence
RollbackCertificates 3329 binMSICACert.dll ExecuteSequence
CommitCertificates 3585 binMSICACert.dll ExecuteSequence
EvaluateScheduledTasks 1 binMSICA.dll EvaluateScheduledTasks
InstallScheduledTasks 3073 binMSICA.dll ExecuteSequence
RollbackScheduledTasks 3329 binMSICA.dll ExecuteSequence
CommitScheduledTasks 3585 binMSICA.dll ExecuteSequence
<<NOKEEP
@ -125,6 +151,10 @@ All :: "$(LANG).$(PLAT).$(CFG).InstallExecuteSequence-1.idt"
Action Condition Sequence
s$(MSIBUILD_LENGTH_ID) S255 I2
InstallExecuteSequence Action
EvaluateCertificates 6577
RollbackCertificates 6576
InstallCertificates 6578
CommitCertificates 6579
EvaluateScheduledTasks 6580
RollbackScheduledTasks 6581
InstallScheduledTasks 6582

View File

@ -5,7 +5,8 @@
// Local constants
////////////////////////////////////////////////////////////////////////////
#define MSICACERT_CERT_TICK_SIZE (4*1024)
#define MSICA_CERT_TICK_SIZE (4*1024)
#define MSICA_TASK_TICK_SIZE (16*1024)
////////////////////////////////////////////////////////////////////////////
@ -25,7 +26,7 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpRes
// Exported functions
////////////////////////////////////////////////////////////////////
UINT MSICACERT_API EvaluateSequence(MSIHANDLE hInstall)
UINT MSICA_API EvaluateCertificates(MSIHANDLE hInstall)
{
//::MessageBox(NULL, _T(__FUNCTION__), _T("MSICACert"), MB_OK);
@ -134,15 +135,15 @@ UINT MSICACERT_API EvaluateSequence(MSIHANDLE hInstall)
if (iAction >= INSTALLSTATE_LOCAL) {
// Component is or should be installed. Install the certificate.
olExecute.AddTail(new MSICA::COpCertInstall(binCert.GetData(), binCert.GetCount(), sStore, iEncoding, iFlags, MSICACERT_CERT_TICK_SIZE));
olExecute.AddTail(new MSICA::COpCertInstall(binCert.GetData(), binCert.GetCount(), sStore, iEncoding, iFlags, MSICA_CERT_TICK_SIZE));
} else if (iAction >= INSTALLSTATE_REMOVED) {
// Component is installed, but should be degraded to advertised/removed. Delete the certificate.
olExecute.AddTail(new MSICA::COpCertRemove(binCert.GetData(), binCert.GetCount(), sStore, iEncoding, iFlags, MSICACERT_CERT_TICK_SIZE));
olExecute.AddTail(new MSICA::COpCertRemove(binCert.GetData(), binCert.GetCount(), sStore, iEncoding, iFlags, MSICA_CERT_TICK_SIZE));
}
// The amount of tick space to add for each certificate to progress indicator.
::MsiRecordSetInteger(hRecordProg, 1, 3 );
::MsiRecordSetInteger(hRecordProg, 2, MSICACERT_CERT_TICK_SIZE);
::MsiRecordSetInteger(hRecordProg, 2, MSICA_CERT_TICK_SIZE);
if (::MsiProcessMessage(hInstall, INSTALLMESSAGE_PROGRESS, hRecordProg) == IDCANCEL) { uiResult = ERROR_INSTALL_USEREXIT; break; }
}
::MsiViewClose(hViewCert);
@ -176,9 +177,141 @@ UINT MSICACERT_API EvaluateSequence(MSIHANDLE hInstall)
}
UINT MSICACERT_API ExecuteSequence(MSIHANDLE hInstall)
UINT MSICA_API EvaluateScheduledTasks(MSIHANDLE hInstall)
{
//::MessageBox(NULL, _T(__FUNCTION__), _T("MSICACert"), MB_OK);
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(::CoInitialize(NULL));
MSICA::COpList olExecute;
BOOL bRollbackEnabled;
PMSIHANDLE
hDatabase,
hRecordProg = ::MsiCreateRecord(3);
ATL::CAtlString sValue;
// Check and add the rollback enabled state.
uiResult = ::MsiGetProperty(hInstall, _T("RollbackDisabled"), sValue);
bRollbackEnabled = uiResult == NO_ERROR ?
_ttoi(sValue) || !sValue.IsEmpty() && _totlower(sValue.GetAt(0)) == _T('y') ? FALSE : TRUE :
TRUE;
olExecute.AddTail(new MSICA::COpRollbackEnable(bRollbackEnabled));
// Open MSI database.
hDatabase = ::MsiGetActiveDatabase(hInstall);
if (hDatabase) {
// Check if ScheduledTask table exists. If it doesn't exist, there's nothing to do.
MSICONDITION condition = ::MsiDatabaseIsTablePersistent(hDatabase, _T("ScheduledTask"));
if (condition == MSICONDITION_FALSE || condition == MSICONDITION_TRUE) {
PMSIHANDLE hViewST;
// Prepare a query to get a list/view of tasks.
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Task,DisplayName,Application,Parameters,Directory_,Flags,Priority,User,Password,Author,Description,IdleMin,IdleDeadline,MaxRuntime,Condition,Component_ FROM ScheduledTask"), &hViewST);
if (uiResult == NO_ERROR) {
// Execute query!
uiResult = ::MsiViewExecute(hViewST, NULL);
if (uiResult == NO_ERROR) {
//ATL::CAtlString sComponent;
ATL::CAtlStringW sDisplayName;
for (;;) {
PMSIHANDLE hRecord;
INSTALLSTATE iInstalled, iAction;
// Fetch one record from the view.
uiResult = ::MsiViewFetch(hViewST, &hRecord);
if (uiResult == ERROR_NO_MORE_ITEMS) {
uiResult = NO_ERROR;
break;
} else if (uiResult != NO_ERROR)
break;
// Read and evaluate task's condition.
uiResult = ::MsiRecordGetString(hRecord, 15, sValue);
if (uiResult != NO_ERROR) break;
condition = ::MsiEvaluateCondition(hInstall, sValue);
if (condition == MSICONDITION_FALSE)
continue;
else if (condition == MSICONDITION_ERROR) {
uiResult = ERROR_INVALID_FIELD;
break;
}
// Read task's Component ID.
uiResult = ::MsiRecordGetString(hRecord, 16, sValue);
if (uiResult != NO_ERROR) break;
// Get the component state.
uiResult = ::MsiGetComponentState(hInstall, sValue, &iInstalled, &iAction);
if (uiResult != NO_ERROR) break;
// Get task's DisplayName.
uiResult = ::MsiRecordFormatStringW(hInstall, hRecord, 2, sDisplayName);
if (iAction >= INSTALLSTATE_LOCAL) {
// Component is or should be installed. Create the task.
PMSIHANDLE hViewTT;
MSICA::COpTaskCreate *opCreateTask = new MSICA::COpTaskCreate(sDisplayName, MSICA_TASK_TICK_SIZE);
// Populate the operation with task's data.
uiResult = opCreateTask->SetFromRecord(hInstall, hRecord);
if (uiResult != NO_ERROR) break;
// Perform another query to get task's triggers.
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Trigger,BeginDate,EndDate,StartTime,StartTimeRand,MinutesDuration,MinutesInterval,Flags,Type,DaysInterval,WeeksInterval,DaysOfTheWeek,DaysOfMonth,WeekOfMonth,MonthsOfYear FROM TaskTrigger WHERE Task_=?"), &hViewTT);
if (uiResult != NO_ERROR) break;
// Execute query!
uiResult = ::MsiViewExecute(hViewTT, hRecord);
if (uiResult == NO_ERROR) {
// Populate trigger list.
uiResult = opCreateTask->SetTriggersFromView(hViewTT);
::MsiViewClose(hViewTT);
if (uiResult != NO_ERROR) break;
} else
break;
olExecute.AddTail(opCreateTask);
} else if (iAction >= INSTALLSTATE_REMOVED) {
// Component is installed, but should be degraded to advertised/removed. Delete the task.
olExecute.AddTail(new MSICA::COpTaskDelete(sDisplayName, MSICA_TASK_TICK_SIZE));
}
// The amount of tick space to add for each task to progress indicator.
::MsiRecordSetInteger(hRecordProg, 1, 3 );
::MsiRecordSetInteger(hRecordProg, 2, MSICA_TASK_TICK_SIZE);
if (::MsiProcessMessage(hInstall, INSTALLMESSAGE_PROGRESS, hRecordProg) == IDCANCEL) { uiResult = ERROR_INSTALL_USEREXIT; break; }
}
::MsiViewClose(hViewST);
if (uiResult == NO_ERROR) {
// Save the sequences.
uiResult = MSICA::SaveSequence(hInstall, _T("InstallScheduledTasks"), _T("CommitScheduledTasks"), _T("RollbackScheduledTasks"), olExecute);
} else if (uiResult != ERROR_INSTALL_USEREXIT) {
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_OPLIST_CREATE);
::MsiRecordSetInteger(hRecordProg, 2, uiResult );
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
} else {
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
} else {
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
}
} else {
uiResult = ERROR_INSTALL_DATABASE_OPEN;
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
olExecute.Free();
if (bIsCoInitialized) ::CoUninitialize();
return uiResult;
}
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall)
{
return MSICA::ExecuteSequence(hInstall);
}

View File

@ -1,5 +1,5 @@
#ifndef __MSICATS_H__
#define __MSICATS_H__
#ifndef __MSICA_H__
#define __MSICA_H__
#include <msi.h>
@ -8,12 +8,12 @@
// Calling declaration
////////////////////////////////////////////////////////////////////
#if defined(MSICATS_DLL)
#define MSICATS_API __declspec(dllexport)
#elif defined(MSICATS_DLLIMP)
#define MSICATS_API __declspec(dllimport)
#if defined(MSICA_DLL)
#define MSICA_API __declspec(dllexport)
#elif defined(MSICA_DLLIMP)
#define MSICA_API __declspec(dllimport)
#else
#define MSICATS_API
#define MSICA_API
#endif
////////////////////////////////////////////////////////////////////
@ -24,11 +24,12 @@
extern "C" {
#endif
UINT MSICATS_API EvaluateSequence(MSIHANDLE hInstall);
UINT MSICATS_API ExecuteSequence(MSIHANDLE hInstall);
UINT MSICA_API EvaluateCertificates(MSIHANDLE hInstall);
UINT MSICA_API EvaluateScheduledTasks(MSIHANDLE hInstall);
UINT MSICA_API ExecuteSequence(MSIHANDLE hInstall);
#ifdef __cplusplus
}
#endif
#endif // __MSICATS_H__
#endif // __MSICA_H__

View File

@ -138,7 +138,7 @@
<ClCompile />
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="MSICATS.cpp" />
<ClCompile Include="MSICA.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
@ -147,14 +147,14 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MSICATS.h" />
<ClInclude Include="MSICA.h" />
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\MSICATS.rc" />
<ResourceCompile Include="res\MSICA.rc" />
</ItemGroup>
<ItemGroup>
<ResourceLocalizator Include="res\MSICATS.rcx" />
<ResourceLocalizator Include="res\MSICA.rcx" />
</ItemGroup>
<ItemGroup>
<None Include="L10N\sl_SI.po" />

View File

@ -15,7 +15,7 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="MSICATS.cpp">
<ClCompile Include="MSICA.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="stdafx.cpp">
@ -23,7 +23,7 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MSICATS.h">
<ClInclude Include="MSICA.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
@ -31,12 +31,12 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\MSICATS.rc">
<ResourceCompile Include="res\MSICA.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ResourceLocalizator Include="res\MSICATS.rcx">
<ResourceLocalizator Include="res\MSICA.rcx">
<Filter>Resource Files</Filter>
</ResourceLocalizator>
</ItemGroup>

BIN
MSICA/res/MSICA.rc Normal file

Binary file not shown.

View File

@ -20,7 +20,7 @@
#define _WIN32_WINNT 0x0501 // Include Windows XP symbols
#define _WINSOCKAPI_ // Prevent inclusion of winsock.h in windows.h
#ifdef _WINDLL
#define MSICATS_DLL // This is a DLL
#define MSICA_DLL // This is a DLL
#endif
#define _ATL_APARTMENT_THREADED
@ -34,4 +34,4 @@
#include "..\MSICALib\MSICALib.h"
#include "MSICATS.h"
#include "MSICA.h"

View File

@ -1,95 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: MSICACert\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-14 11:10+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Simon Rozman <simon.rozman@amebis.si>\n"
"Language-Team: Amebis, d. o. o., Kamnik <simon.rozman@amebis.si>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __\n"
"X-Poedit-Basepath: ..\n"
"X-Generator: Poedit 1.5.7\n"
"X-Poedit-SearchPath-0: MSIBuild\n"
"X-Poedit-SearchPath-1: res\n"
# Language Code and Windows Charset (hexadecimal)
# If we do not intend to provide different localization of same base language (like merging Portugal Portugeese and Brasil Portugese into the same Portugeese), use the code of Microsoft defined default sublanguage.
# For example: Use LANG_PORTUGUESE + SUBLANG_DEFAULT = 0x416, although 0x416 represents Brasil Portugese (too).
#: res/MSICACert.rcx:42
msgid "040904e4"
msgstr "042404e2"
# Language Code (hexadecimal)
# If we do not intend to provide different localization of same base language (like merging Portugal Portugeese and Brasil Portugese into the same Portugeese), use the code of Microsoft defined default sublanguage.
# For example: Use LANG_PORTUGUESE + SUBLANG_DEFAULT = 0x416, although 0x416 represents Brasil Portugese (too).
#: res/MSICACert.rcx:60
msgid "0x409"
msgstr "0x424"
# Windows charset for this language (decimal)
#: res/MSICACert.rcx:60 MSIBuild/En.Win32.Debug.ActionText-2.idtx:3
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:3
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:3
#: MSIBuild/En.x64.Release.ActionText-2.idtx:3
msgid "1252"
msgstr "1250"
# The name of the constant in RC to include the resources in this language.
#: res/MSICACert.rcx:41 res/MSICACert.rcx:59 res/MSICACert.rcx:75
msgid "AFX_TARG_ENU"
msgstr "AFX_TARG_SLV"
#: res/MSICACert.rcx:44
msgid "Amebis, d. o. o., Kamnik"
msgstr "Amebis, d. o. o., Kamnik"
#: res/MSICACert.rcx:45
msgid "Certificate Installation Support Library"
msgstr "Podporna knjižnica za nameščanje certifikatov"
#: res/MSICACert.rcx:48
msgid "Copyright © Amebis, d. o. o., Kamnik, 2012"
msgstr "Vse pravice pridržane © Amebis, d. o. o., Kamnik, 2012"
# Language Identifier (see http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx)
#: res/MSICACert.rcx:77
msgid "LANG_ENGLISH"
msgstr "LANG_SLOVENIAN"
#: res/MSICACert.rcx:49
msgid "MSICA"
msgstr "MSICA"
#: res/MSICACert.rcx:47
msgid "MSICACert"
msgstr "MSICACert"
# Sublanguage Identifier (see http://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx)
#: res/MSICACert.rcx:77
msgid "SUBLANG_DEFAULT"
msgstr "SUBLANG_DEFAULT"
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:4
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
#: MSIBuild/En.x64.Release.ActionText-2.idtx:4
msgid "Certificate: [1]"
msgstr "Digitalno potrdilo: [1]"
#: MSIBuild/En.Win32.Debug.ActionText-2.idtx:4
#: MSIBuild/En.Win32.Release.ActionText-2.idtx:4
#: MSIBuild/En.x64.Debug.ActionText-2.idtx:4
#: MSIBuild/En.x64.Release.ActionText-2.idtx:4
msgid "Installing certificates"
msgstr "Nameščanje digitalnih potrdil"
#~ msgid "Scheduled task: [1]"
#~ msgstr "Razporejeno opravilo: [1]"
#~ msgid "Registering scheduled tasks"
#~ msgstr "Registracija razporejenih opravil"

View File

@ -1,128 +0,0 @@
!INCLUDE "..\..\..\include\MSIBuildCfg.mak"
MSIBUILD_IS_LOCALIZEABLE=1
######################################################################
# _Validation
All :: "$(LANG).$(PLAT).$(CFG)._Validation-1.idt"
"$(LANG).$(PLAT).$(CFG)._Validation-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Table Column Nullable MinValue MaxValue KeyTable KeyColumn Category Set Description
s32 s32 s4 I4 I4 S255 I2 S32 S255 S255
_Validation Table Column
Certificate Certificate N Identifier Primary key, non-localized token.
Certificate Store N Formatted MY;Root;Trust;CA Certificate store name for CertOpenStore() function call. The store provider is always CERT_STORE_PROV_SYSTEM. Therefore, possible values are: MY, Root, Trust, or CA.
Certificate Flags N DoubleInteger Flags for CertOpenStore() function call.
Certificate Encoding N DoubleInteger 0;1;65536;65537 Certificate encoding (combination of X509_ASN_ENCODING(1) and PKCS_7_ASN_ENCODING(65536) flags).
Certificate Binary_ N Binary 1 Identifier The certificate file. The binary information is looked up from the Binary Table.
Certificate Condition Y Condition Optional expression which skips the certificate if evaluates to expFalse. If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.
Certificate Component_ N Component 1 Identifier Component the certificate is part of.
<<NOKEEP
######################################################################
# ActionText
All :: "$(LANG).$(PLAT).$(CFG).ActionText-2.idt"
"En.$(PLAT).$(CFG).ActionText-2.idtx" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Action Description Template
s$(MSIBUILD_LENGTH_ID) L0 L0
1252 ActionText Action
InstallCertificates Installing certificates Certificate: [1]
<<NOKEEP
"De.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx" "..\L10N\de_DE.po"
rcxgettext.exe idtp $@ $**
"En.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx"
copy /y $** $@ > NUL
"It.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx" "..\L10N\it_IT.po"
rcxgettext.exe idtp $@ $**
"Sl.$(PLAT).$(CFG).ActionText-2.idt" : "En.$(PLAT).$(CFG).ActionText-2.idtx" "..\L10N\sl_SI.po"
rcxgettext.exe idtp $@ $**
######################################################################
# Binary
All :: \
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" \
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICACert.dll"
"$(LANG).$(PLAT).$(CFG).Binary-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak" "$(LANG).$(PLAT).$(CFG).Binary-1"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Name Data
s$(MSIBUILD_LENGTH_ID) v0
Binary Name
binMSICACert.dll MSICACert.dll
<<NOKEEP
"$(LANG).$(PLAT).$(CFG).Binary-1\MSICACert.dll" : "..\..\output\$(PLAT).$(CFG)\MSICACert.dll"
copy /y $** $@ > NUL
######################################################################
# Certificate
All :: "$(LANG).$(PLAT).$(CFG).Certificate-1.idt"
"$(LANG).$(PLAT).$(CFG).Certificate-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Certificate Store Flags Encoding Binary_ Condition Component_
s$(MSIBUILD_LENGTH_ID) s255 i4 i4 s$(MSIBUILD_LENGTH_ID) S255 s$(MSIBUILD_LENGTH_ID)
Certificate Certificate
<<NOKEEP
######################################################################
# CustomAction
All :: "$(LANG).$(PLAT).$(CFG).CustomAction-1.idt"
"$(LANG).$(PLAT).$(CFG).CustomAction-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Action Type Source Target
s$(MSIBUILD_LENGTH_ID) i2 S$(MSIBUILD_LENGTH_ID) S255
CustomAction Action
EvaluateCertificates 1 binMSICACert.dll EvaluateSequence
InstallCertificates 3073 binMSICACert.dll ExecuteSequence
RollbackCertificates 3329 binMSICACert.dll ExecuteSequence
CommitCertificates 3585 binMSICACert.dll ExecuteSequence
<<NOKEEP
######################################################################
# InstallExecuteSequence
All :: "$(LANG).$(PLAT).$(CFG).InstallExecuteSequence-1.idt"
"$(LANG).$(PLAT).$(CFG).InstallExecuteSequence-1.idt" : "Makefile" "..\..\..\include\MSIBuildCfg.mak"
-if exist $@ del /f /q $@
move /y << $@ > NUL
Action Condition Sequence
s$(MSIBUILD_LENGTH_ID) S255 I2
InstallExecuteSequence Action
EvaluateCertificates 6577
RollbackCertificates 6576
InstallCertificates 6578
CommitCertificates 6579
<<NOKEEP
######################################################################
# Build MSM module!
######################################################################
!INCLUDE "..\..\..\MSIBuild\MSM.mak"

View File

@ -1,34 +0,0 @@
#ifndef __MSICACERT_H__
#define __MSICACERT_H__
#include <msi.h>
////////////////////////////////////////////////////////////////////
// Calling declaration
////////////////////////////////////////////////////////////////////
#if defined(MSICACERT_DLL)
#define MSICACERT_API __declspec(dllexport)
#elif defined(MSICACERT_DLLIMP)
#define MSICACERT_API __declspec(dllimport)
#else
#define MSICACERT_API
#endif
////////////////////////////////////////////////////////////////////
// Exported functions
////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
extern "C" {
#endif
UINT MSICACERT_API EvaluateSequence(MSIHANDLE hInstall);
UINT MSICACERT_API ExecuteSequence(MSIHANDLE hInstall);
#ifdef __cplusplus
}
#endif
#endif // __MSICACERT_H__

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{0379563D-9835-44AC-928E-24D4E316CE5D}</ProjectGuid>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\rcxgettext.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\common.props" />
<Import Project="..\include\Win32.props" />
<Import Project="..\include\Release.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\common.props" />
<Import Project="..\include\Win32.props" />
<Import Project="..\include\Debug.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\common.props" />
<Import Project="..\include\x64.props" />
<Import Project="..\include\Release.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\include\common.props" />
<Import Project="..\include\x64.props" />
<Import Project="..\include\Debug.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\output\$(Platform).$(Configuration)\</OutDir>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\output\$(Platform).$(Configuration)\</OutDir>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</IgnoreImportLibrary>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\output\$(Platform).$(Configuration)\</OutDir>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\output\$(Platform).$(Configuration)\</OutDir>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</IgnoreImportLibrary>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<HeaderFileName>%(Filename)_h.h</HeaderFileName>
</Midl>
<ClCompile />
<ResourceLocalizator>
<LanguageCatalogs>L10N\sl_SI.po</LanguageCatalogs>
</ResourceLocalizator>
<ClCompile />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<HeaderFileName>%(Filename)_h.h</HeaderFileName>
</Midl>
<ClCompile />
<ResourceLocalizator>
<LanguageCatalogs>L10N\sl_SI.po</LanguageCatalogs>
</ResourceLocalizator>
<ClCompile />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<HeaderFileName>%(Filename)_h.h</HeaderFileName>
</Midl>
<ClCompile />
<ResourceLocalizator>
<LanguageCatalogs>L10N\sl_SI.po</LanguageCatalogs>
</ResourceLocalizator>
<ClCompile />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<HeaderFileName>%(Filename)_h.h</HeaderFileName>
</Midl>
<ClCompile />
<ResourceLocalizator>
<LanguageCatalogs>L10N\sl_SI.po</LanguageCatalogs>
</ResourceLocalizator>
<ClCompile />
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="MSICACert.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MSICACert.h" />
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\MSICACert.rc" />
</ItemGroup>
<ItemGroup>
<ResourceLocalizator Include="res\MSICACert.rcx" />
</ItemGroup>
<ItemGroup>
<None Include="L10N\sl_SI.po" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MSICALib\MSICALib.vcxproj">
<Project>{8552ee55-177e-4f51-b51b-baf7d6462cde}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\rcxgettext.targets" />
</ImportGroup>
</Project>

View File

@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;rcx;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;po</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="MSICACert.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MSICACert.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\MSICACert.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ResourceLocalizator Include="res\MSICACert.rcx">
<Filter>Resource Files</Filter>
</ResourceLocalizator>
</ItemGroup>
<ItemGroup>
<None Include="L10N\sl_SI.po">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
</Project>

Binary file not shown.

View File

@ -1,37 +0,0 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently
#pragma once
#if defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#if defined(_WIN32) && !defined(WIN32)
#define WIN32
#endif
#ifndef STRICT
#define STRICT
#endif
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#define _WIN32_WINNT 0x0501 // Include Windows XP symbols
#define _WINSOCKAPI_ // Prevent inclusion of winsock.h in windows.h
#ifdef _WINDLL
#define MSICACERT_DLL // This is a DLL
#endif
#define _ATL_APARTMENT_THREADED
#include <atlbase.h>
#include <atlfile.h>
#include <atlstr.h>
#include <corerror.h>
#include <stdlib.h>
#include <time.h>
#include "..\MSICALib\MSICALib.h"
#include "MSICACert.h"

View File

@ -1,9 +0,0 @@
@echo off
nmake.exe /ls All LANG=En CFG=Debug PLAT=Win32
nmake.exe /ls All LANG=Sl CFG=Debug PLAT=Win32
nmake.exe /ls All LANG=En CFG=Debug PLAT=x64
nmake.exe /ls All LANG=Sl CFG=Debug PLAT=x64
nmake.exe /ls All LANG=En CFG=Release PLAT=Win32
nmake.exe /ls All LANG=Sl CFG=Release PLAT=Win32
nmake.exe /ls All LANG=En CFG=Release PLAT=x64
nmake.exe /ls All LANG=Sl CFG=Release PLAT=x64

View File

@ -1,9 +0,0 @@
@echo off
nmake.exe /ls Clean LANG=En CFG=Debug PLAT=Win32
nmake.exe /ls Clean LANG=Sl CFG=Debug PLAT=Win32
nmake.exe /ls Clean LANG=En CFG=Debug PLAT=x64
nmake.exe /ls Clean LANG=Sl CFG=Debug PLAT=x64
nmake.exe /ls Clean LANG=En CFG=Release PLAT=Win32
nmake.exe /ls Clean LANG=Sl CFG=Release PLAT=Win32
nmake.exe /ls Clean LANG=En CFG=Release PLAT=x64
nmake.exe /ls Clean LANG=Sl CFG=Release PLAT=x64

View File

@ -1,165 +0,0 @@
#include "stdafx.h"
////////////////////////////////////////////////////////////////////////////
// Local constants
////////////////////////////////////////////////////////////////////////////
#define MSICATS_TASK_TICK_SIZE (16*1024)
////////////////////////////////////////////////////////////////////////////
// Global functions
////////////////////////////////////////////////////////////////////////////
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(hInstance);
UNREFERENCED_PARAMETER(lpReserved);
return TRUE;
}
////////////////////////////////////////////////////////////////////
// Exported functions
////////////////////////////////////////////////////////////////////
UINT MSICATS_API EvaluateSequence(MSIHANDLE hInstall)
{
UINT uiResult;
BOOL bIsCoInitialized = SUCCEEDED(::CoInitialize(NULL));
MSICA::COpList olExecute;
BOOL bRollbackEnabled;
PMSIHANDLE
hDatabase,
hRecordProg = ::MsiCreateRecord(3);
ATL::CAtlString sValue;
// Check and add the rollback enabled state.
uiResult = ::MsiGetProperty(hInstall, _T("RollbackDisabled"), sValue);
bRollbackEnabled = uiResult == NO_ERROR ?
_ttoi(sValue) || !sValue.IsEmpty() && _totlower(sValue.GetAt(0)) == _T('y') ? FALSE : TRUE :
TRUE;
olExecute.AddTail(new MSICA::COpRollbackEnable(bRollbackEnabled));
// Open MSI database.
hDatabase = ::MsiGetActiveDatabase(hInstall);
if (hDatabase) {
// Check if ScheduledTask table exists. If it doesn't exist, there's nothing to do.
MSICONDITION condition = ::MsiDatabaseIsTablePersistent(hDatabase, _T("ScheduledTask"));
if (condition == MSICONDITION_FALSE || condition == MSICONDITION_TRUE) {
PMSIHANDLE hViewST;
// Prepare a query to get a list/view of tasks.
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Task,DisplayName,Application,Parameters,Directory_,Flags,Priority,User,Password,Author,Description,IdleMin,IdleDeadline,MaxRuntime,Condition,Component_ FROM ScheduledTask"), &hViewST);
if (uiResult == NO_ERROR) {
// Execute query!
uiResult = ::MsiViewExecute(hViewST, NULL);
if (uiResult == NO_ERROR) {
//ATL::CAtlString sComponent;
ATL::CAtlStringW sDisplayName;
for (;;) {
PMSIHANDLE hRecord;
INSTALLSTATE iInstalled, iAction;
// Fetch one record from the view.
uiResult = ::MsiViewFetch(hViewST, &hRecord);
if (uiResult == ERROR_NO_MORE_ITEMS) {
uiResult = NO_ERROR;
break;
} else if (uiResult != NO_ERROR)
break;
// Read and evaluate task's condition.
uiResult = ::MsiRecordGetString(hRecord, 15, sValue);
if (uiResult != NO_ERROR) break;
condition = ::MsiEvaluateCondition(hInstall, sValue);
if (condition == MSICONDITION_FALSE)
continue;
else if (condition == MSICONDITION_ERROR) {
uiResult = ERROR_INVALID_FIELD;
break;
}
// Read task's Component ID.
uiResult = ::MsiRecordGetString(hRecord, 16, sValue);
if (uiResult != NO_ERROR) break;
// Get the component state.
uiResult = ::MsiGetComponentState(hInstall, sValue, &iInstalled, &iAction);
if (uiResult != NO_ERROR) break;
// Get task's DisplayName.
uiResult = ::MsiRecordFormatStringW(hInstall, hRecord, 2, sDisplayName);
if (iAction >= INSTALLSTATE_LOCAL) {
// Component is or should be installed. Create the task.
PMSIHANDLE hViewTT;
MSICA::COpTaskCreate *opCreateTask = new MSICA::COpTaskCreate(sDisplayName, MSICATS_TASK_TICK_SIZE);
// Populate the operation with task's data.
uiResult = opCreateTask->SetFromRecord(hInstall, hRecord);
if (uiResult != NO_ERROR) break;
// Perform another query to get task's triggers.
uiResult = ::MsiDatabaseOpenView(hDatabase, _T("SELECT Trigger,BeginDate,EndDate,StartTime,StartTimeRand,MinutesDuration,MinutesInterval,Flags,Type,DaysInterval,WeeksInterval,DaysOfTheWeek,DaysOfMonth,WeekOfMonth,MonthsOfYear FROM TaskTrigger WHERE Task_=?"), &hViewTT);
if (uiResult != NO_ERROR) break;
// Execute query!
uiResult = ::MsiViewExecute(hViewTT, hRecord);
if (uiResult == NO_ERROR) {
// Populate trigger list.
uiResult = opCreateTask->SetTriggersFromView(hViewTT);
::MsiViewClose(hViewTT);
if (uiResult != NO_ERROR) break;
} else
break;
olExecute.AddTail(opCreateTask);
} else if (iAction >= INSTALLSTATE_REMOVED) {
// Component is installed, but should be degraded to advertised/removed. Delete the task.
olExecute.AddTail(new MSICA::COpTaskDelete(sDisplayName, MSICATS_TASK_TICK_SIZE));
}
// The amount of tick space to add for each task to progress indicator.
::MsiRecordSetInteger(hRecordProg, 1, 3 );
::MsiRecordSetInteger(hRecordProg, 2, MSICATS_TASK_TICK_SIZE);
if (::MsiProcessMessage(hInstall, INSTALLMESSAGE_PROGRESS, hRecordProg) == IDCANCEL) { uiResult = ERROR_INSTALL_USEREXIT; break; }
}
::MsiViewClose(hViewST);
if (uiResult == NO_ERROR) {
// Save the sequences.
uiResult = MSICA::SaveSequence(hInstall, _T("InstallScheduledTasks"), _T("CommitScheduledTasks"), _T("RollbackScheduledTasks"), olExecute);
} else if (uiResult != ERROR_INSTALL_USEREXIT) {
::MsiRecordSetInteger(hRecordProg, 1, ERROR_INSTALL_OPLIST_CREATE);
::MsiRecordSetInteger(hRecordProg, 2, uiResult );
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
} else {
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
} else {
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
}
} else {
uiResult = ERROR_INSTALL_DATABASE_OPEN;
::MsiRecordSetInteger(hRecordProg, 1, uiResult);
::MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecordProg);
}
olExecute.Free();
if (bIsCoInitialized) ::CoUninitialize();
return uiResult;
}
UINT MSICATS_API ExecuteSequence(MSIHANDLE hInstall)
{
return MSICA::ExecuteSequence(hInstall);
}

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
#include "stdafx.h"