Mergemod.dll problem

D

Douglas Hogan

I cannot get the merge, mergeex functions to work.

1. All the standard MSMs seem to have directory entries which are
different to my .msi files.
eg. (from directory table)

ATL.MSM
SystemFolder, TARGETDIR, .

my .msi
SystemFolder, TARGETDIR, .:System32

This causes the merge to fail with error 'msmErrorTableMerge',
ModuleTable = 'Directory', ModuleKeys = 'SystemFolder'

As all the MSMs I have played with have 'non standard' default
directories for system folders specified, how can I get any to merge
properly.

2. I played with ATL.MSM to get it to merge, but then it wouldn't save
with CloseDatabase (VARIANT_TRUE)


I have placed some sample code below:



MsmMergeTypeLib::IMsmMerge2Ptr MergePtr;
MergePtr.CreateInstance (__uuidof(MsmMergeTypeLib::MsmMerge2));
CString szPath = "C:\\Product Development\\output\\Merge
Modules\\MFC42.MSM";
MergePtr->OpenDatabase (_bstr_t (pszPathname));
MergePtr->OpenModule (_bstr_t (szPath), 0);
HRESULT hResult = MergePtr->MergeEx (_bstr_t ("Feature4"), _bstr_t
(""), NULL);
// HRESULT hResult = MergePtr->Merge (_bstr_t ("Feature4"), _bstr_t
(""));

MsmMergeTypeLib::IMsmErrorsPtr ErrorsPtr = MergePtr->Errors;
int nErrors = ErrorsPtr->Count;
if (0 == nErrors)
{
MergePtr->CloseModule ();
MergePtr->CloseDatabase (VARIANT_TRUE);
}
else
{
for (int nIndex = 0; nIndex < nErrors; nIndex++)
{
MsmMergeTypeLib::IMsmErrorPtr ErrorPtr = ErrorsPtr->Item [nIndex +
1];
MsmMergeTypeLib::msmErrorType ErrorType = ErrorPtr->Type;
_bstr_t moduleTable = ErrorPtr->ModuleTable;
_bstr_t databaseTable = ErrorPtr->DatabaseTable;
MsmMergeTypeLib::IMsmStringsPtr StringsPtr = ErrorPtr->ModuleKeys;
for (int nIndex2 = 0; nIndex2 < StringsPtr->Count; nIndex2++)
{
_bstr_t szKey = StringsPtr->Item [nIndex2 + 1];

}
}
MergePtr->CloseModule ();
MergePtr->CloseDatabase (VARIANT_FALSE);
}
 
D

Douglas Hogan

Forget the last message, the mergemod code works fine. A different
issue was causing my problem.
 
Top