From: Rob M. <ro...@us...> - 2008-12-12 11:59:55
|
Update of /cvsroot/wix/wix/src/setupbld/dll In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv22629/src/setupbld/dll Modified Files: SetupBuilder.cpp Log Message: HeathS: Added 64-bit INSTALLROOTDIR properties to the documentation RobMen: SFBUG:1752713 - make Class/@Context attribute optional. RobMen: SFBUG:1577345 - take another pass at the WebAddress/@IP documentation. A-DaMans: SFBug: 1633301 - AllowAdvertise attribute sometimes missing. RobMen: SFBUG:1753850 - minor fixes to TypeLib harvesting based on suggestions but only those that are documented. BobArnso: Fix SFBUG:2025135: Add @responseFile syntax and a blurb in the .chm. CAraman: Limited support for applying patches from setup.exe stubs. Fix several defects found through static analysis. Fix definition of SETUP_INSTALL_CHAIN_LINK flag. Fix definition and usage of SETUP_INSTALL_CHAIN struct to prevent manifest corruption when more than one package and at least one transform is specified. Index: SetupBuilder.cpp =================================================================== RCS file: /cvsroot/wix/wix/src/setupbld/dll/SetupBuilder.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SetupBuilder.cpp 24 Oct 2008 11:48:26 -0000 1.4 --- SetupBuilder.cpp 12 Dec 2008 11:59:49 -0000 1.5 *************** *** 30,38 **** static HRESULT GetProductCodeAndVersionAndAllUsers( __in LPCWSTR wzMsiPath, ! __in LPWSTR wzProductCode, __in DWORD cchProductCode, ! __in LPWSTR wzProductVersion, __in DWORD cchProductVersion, ! __in int* piAllUsers ); --- 30,38 ---- static HRESULT GetProductCodeAndVersionAndAllUsers( __in LPCWSTR wzMsiPath, ! __out_ecount(cchProductCode) LPWSTR wzProductCode, __in DWORD cchProductCode, ! __out_ecount(cchProductVersion) LPWSTR wzProductVersion, __in DWORD cchProductVersion, ! __out int* piAllUsers ); *************** *** 42,47 **** __in ULONG ulReason, __in LPVOID ! ) { switch(ulReason) { --- 42,49 ---- __in ULONG ulReason, __in LPVOID ! ) throw() { + UNREFERENCED_PARAMETER(hInst); + switch(ulReason) { *************** *** 61,66 **** __in_opt LPCWSTR wzLicensePath, __in_opt LPCWSTR wzBitmapPath, ! __in CREATE_SETUP_PACKAGE rgPackages[], ! __in CREATE_SETUP_TRANSFORMS rgTransforms[], __in BYTE cPackages, __in BYTE cTransforms, --- 63,68 ---- __in_opt LPCWSTR wzLicensePath, __in_opt LPCWSTR wzBitmapPath, ! __in_ecount(cPackages) const CREATE_SETUP_PACKAGE rgPackages[], ! __in_ecount_opt(cTransforms) const CREATE_SETUP_TRANSFORMS rgTransforms[], __in BYTE cPackages, __in BYTE cTransforms, *************** *** 83,87 **** // for the total number of packages (minus one because the SETUP_INSTALL_CHA__in comes with a package). // ! cbSetupChain = sizeof(SETUP_INSTALL_CHAIN) + (sizeof(SETUP_INSTALL_PACKAGE) * (cPackages - 1)) + (sizeof(SETUP_INSTALL_TRANSFORM) * (cTransforms - 1)); pSetupChain = (SETUP_INSTALL_CHAIN*)MemAlloc(cbSetupChain, TRUE); --- 85,89 ---- // for the total number of packages (minus one because the SETUP_INSTALL_CHA__in comes with a package). // ! cbSetupChain = sizeof(SETUP_INSTALL_CHAIN) + (sizeof(SETUP_INSTALL_PACKAGE) * (cPackages - 1)) + (sizeof(SETUP_INSTALL_TRANSFORM) * cTransforms); pSetupChain = (SETUP_INSTALL_CHAIN*)MemAlloc(cbSetupChain, TRUE); *************** *** 101,129 **** for (BYTE i = 0; i < cPackages; ++i) { ! WCHAR wzProductCode[39]; ! WCHAR wzProductVersion[36]; ! int iAllUsers = 0; ! ! hr= ::StringCchPrintfA(pPackage->szSource, countof(pPackage->szSource), "MSI%02d", i); ExitOnFailure(hr, "Failed to generate package resource identifier."); ! hr = GetProductCodeAndVersionAndAllUsers(rgPackages[i].wzSourcePath, wzProductCode, countof(wzProductCode), wzProductVersion, countof(wzProductVersion), &iAllUsers); ! ExitOnFailure1(hr, "Failed to get product code and version from MSI: %S", rgPackages[i].wzSourcePath); ! hr = ::IIDFromString(wzProductCode, &pPackage->guidProductCode); ! ExitOnFailure(hr, "Failed to convert product code to GUID."); ! hr = FileVersionFromString(wzProductVersion, &pPackage->dwVersionMajor, &pPackage->dwVersionMinor); ! ExitOnFailure(hr, "Failed to get version from string."); ! pPackage->dwAttributes = 0; ! pPackage->dwAttributes |= iAllUsers == 1 ? SETUP_INSTALL_CHAIN_ALLUSERS : 0; ! pPackage->dwAttributes |= rgPackages[i].fPrivileged ? SETUP_INSTALL_CHAIN_PRIVILEGED : 0; ! pPackage->dwAttributes |= rgPackages[i].fCache ? SETUP_INSTALL_CHAIN_CACHE : 0; ! pPackage->dwAttributes |= rgPackages[i].fShowUI ? SETUP_INSTALL_CHAIN_SHOW_UI : 0; ! pPackage->dwAttributes |= rgPackages[i].fIgnoreFailures ? SETUP_INSTALL_CHAIN_IGNORE_FAILURES : 0; ! pPackage->dwAttributes |= rgPackages[i].fMinorUpgrade ? SETUP_INSTALL_CHAIN_MINOR_UPGRADE_ALLOWED : 0; ! pPackage->dwAttributes |= rgPackages[i].fLink ? SETUP_INSTALL_CHAIN_LINK : 0; ! pPackage->dwAttributes |= rgPackages[i].fUseTransform ? SETUP_INSTALL_CHAIN_USE_TRANSFORM : 0; hr = ::StringCchCopyW(pPackage->wzFilename, countof(pPackage->wzFilename), FileFromPath(rgPackages[i].wzSourcePath)); --- 103,142 ---- for (BYTE i = 0; i < cPackages; ++i) { ! hr = ::StringCchPrintfA(pPackage->szSource, countof(pPackage->szSource), "MSI%02d", i); ExitOnFailure(hr, "Failed to generate package resource identifier."); ! pPackage->dwAttributes = 0; ! if (rgPackages[i].fPatch) ! { ! ZeroMemory(&pPackage->guidProductCode, sizeof(pPackage->guidProductCode)); ! pPackage->dwVersionMajor = 0; ! pPackage->dwVersionMinor = 0; ! pPackage->dwAttributes |= SETUP_INSTALL_CHAIN_PATCH; ! } ! else ! { ! WCHAR wzProductCode[39]; ! WCHAR wzProductVersion[36]; ! int iAllUsers = 0; ! hr = GetProductCodeAndVersionAndAllUsers(rgPackages[i].wzSourcePath, wzProductCode, countof(wzProductCode), wzProductVersion, countof(wzProductVersion), &iAllUsers); ! ExitOnFailure1(hr, "Failed to get product code and version from MSI: %S", rgPackages[i].wzSourcePath); ! hr = ::IIDFromString(wzProductCode, &pPackage->guidProductCode); ! ExitOnFailure(hr, "Failed to convert product code to GUID."); ! ! hr = FileVersionFromString(wzProductVersion, &pPackage->dwVersionMajor, &pPackage->dwVersionMinor); ! ExitOnFailure(hr, "Failed to get version from string."); ! ! pPackage->dwAttributes |= iAllUsers == 1 ? SETUP_INSTALL_CHAIN_ALLUSERS : 0; ! pPackage->dwAttributes |= rgPackages[i].fPrivileged ? SETUP_INSTALL_CHAIN_PRIVILEGED : 0; ! pPackage->dwAttributes |= rgPackages[i].fCache ? SETUP_INSTALL_CHAIN_CACHE : 0; ! pPackage->dwAttributes |= rgPackages[i].fShowUI ? SETUP_INSTALL_CHAIN_SHOW_UI : 0; ! pPackage->dwAttributes |= rgPackages[i].fIgnoreFailures ? SETUP_INSTALL_CHAIN_IGNORE_FAILURES : 0; ! pPackage->dwAttributes |= rgPackages[i].fMinorUpgrade ? SETUP_INSTALL_CHAIN_MINOR_UPGRADE_ALLOWED : 0; ! pPackage->dwAttributes |= rgPackages[i].fLink ? SETUP_INSTALL_CHAIN_LINK : 0; ! pPackage->dwAttributes |= rgPackages[i].fUseTransform ? SETUP_INSTALL_CHAIN_USE_TRANSFORM : 0; ! } hr = ::StringCchCopyW(pPackage->wzFilename, countof(pPackage->wzFilename), FileFromPath(rgPackages[i].wzSourcePath)); *************** *** 137,141 **** pSetupChain->cTransforms = cTransforms; ! SETUP_INSTALL_TRANSFORM* pTransform = pSetupChain->rgTransforms; for (BYTE i = 0; i < cTransforms; ++i) { --- 150,154 ---- pSetupChain->cTransforms = cTransforms; ! SETUP_INSTALL_TRANSFORM* pTransform = static_cast<SETUP_INSTALL_TRANSFORM*>((void*)pPackage); for (BYTE i = 0; i < cTransforms; ++i) { *************** *** 212,221 **** CREATE_SETUP_PACKAGE createSetupPackage[1]; - CREATE_SETUP_TRANSFORMS createSetupTransform[1]; createSetupPackage[0].wzSourcePath = wzMsi; createSetupPackage[0].fPrivileged = FALSE; createSetupPackage[0].fCache = TRUE; ! hr = CreateSetup(wzSetupStub, NULL, NULL, NULL, createSetupPackage, createSetupTransform, countof(createSetupPackage), NULL, wzOutput); ExitOnFailure(hr, "Failed to CreateSetup."); --- 225,233 ---- CREATE_SETUP_PACKAGE createSetupPackage[1]; createSetupPackage[0].wzSourcePath = wzMsi; createSetupPackage[0].fPrivileged = FALSE; createSetupPackage[0].fCache = TRUE; ! hr = CreateSetup(wzSetupStub, NULL, NULL, NULL, createSetupPackage, NULL, countof(createSetupPackage), 0, wzOutput); ExitOnFailure(hr, "Failed to CreateSetup."); *************** *** 290,298 **** static HRESULT GetProductCodeAndVersionAndAllUsers( __in LPCWSTR wzMsiPath, ! __in LPWSTR wzProductCode, __in DWORD cchProductCode, ! __in LPWSTR wzProductVersion, __in DWORD cchProductVersion, ! __in int* piAllUsers ) { --- 302,310 ---- static HRESULT GetProductCodeAndVersionAndAllUsers( __in LPCWSTR wzMsiPath, ! __out_ecount(cchProductCode) LPWSTR wzProductCode, __in DWORD cchProductCode, ! __out_ecount(cchProductVersion) LPWSTR wzProductVersion, __in DWORD cchProductVersion, ! __out int* piAllUsers ) { |