, SAME FOLDER CD . ( .MSI.) , - MediaPackage. upgrqade ( ), " 1", . .
, Windows, .
, - - .
( , , ?), ), , MediaPackagePath - , ( MediaPackage). , Rollback MediaPackage, .
, GUID .
, , ProductID.
:
CalculateCompressedProdGUID() - ISSetupFilesExtract . . MediaPackagePath . , , , ResolveSource().
ResetMediaPackagePath() - SetCompressedProdGUID() Execute, .
RollbackMediaPackagePath() - MediaPackage, . InstallInitialize(), ( ).
, , , , . , rigamarole - -.
, , ( , , ):
***************
function CalculateCompressedProdGUID(hMsi)
STRING svSubStr, svProductGUID;
STRING szCompressedGUID;
NUMBER iCount, nBuffer;
begin
MsiGetProperty(ISMSI_HANDLE, "ProductCode", svProductGUID, nBuffer);
szCompressedGUID = "";
for iCount = 8 downto 1
StrSub(svSubStr, svProductGUID, iCount, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
endfor;
for iCount = 13 downto 10
StrSub(svSubStr, svProductGUID, iCount, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
endfor;
for iCount = 18 downto 15
StrSub(svSubStr, svProductGUID, iCount, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
endfor;
for iCount = 20 to 23 step 2
StrSub(svSubStr, svProductGUID, iCount + 1, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
StrSub(svSubStr, svProductGUID, iCount, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
endfor;
for iCount = 25 to 36 step 2
StrSub(svSubStr, svProductGUID, iCount + 1, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
StrSub(svSubStr, svProductGUID, iCount, 1);
szCompressedGUID = szCompressedGUID + svSubStr;
endfor;
MsiSetProperty(ISMSI_HANDLE, "COMPRESSED_PROD_GUID", szCompressedGUID);
return ERROR_SUCCESS;
end;
*******************
function SetMediaPackagePathRegistryEntry(hMsi)
STRING svDBMediaPackagePath, szCompressedGUID, szKey;
STRING svIsMinorUpgrade, svPathValue;
NUMBER nBuffer, nReturn, nvPathSize, nvType;
begin
svIsMinorUpgrade = "0";
nBuffer = 1;
MsiGetProperty (ISMSI_HANDLE, "IS_MINOR_UPGRADE", svIsMinorUpgrade, nBuffer);
if (svIsMinorUpgrade != "1") then
return ERROR_SUCCESS;
endif;
nBuffer = 40;
MsiGetProperty(ISMSI_HANDLE, "COMPRESSED_PROD_GUID", szCompressedGUID, nBuffer);
svPathValue = "\\";
if (RegDBGetKeyValueEx ( szKey, "MediaPackage", nvType, svPathValue, nvPathSize ) = 0) then
MsiSetProperty(ISMSI_HANDLE, "MEDIAPACKAGEPATHROLLBACK", svPathValue);
endif;
nBuffer = 130;
MsiGetProperty(ISMSI_HANDLE, "MEDIAPACKAGEPATH", svDBMediaPackagePath, nBuffer);
RegDBSetDefaultRoot(HKEY_CLASSES_ROOT);
szKey = "Installer\\Products\\";
szKey = szKey + szCompressedGUID + "\\SourceList\\Media";
RegDBSetKeyValueEx ( szKey, "MediaPackage", REGDB_STRING, svDBMediaPackagePath, -1 );
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szKey = "SOFTWARE\\Classes\\Installer\\Products\\";
szKey = szKey + szCompressedGUID + "\\SourceList\\Media";
RegDBSetKeyValueEx ( szKey, "MediaPackage", REGDB_STRING, svDBMediaPackagePath, -1 );
return ERROR_SUCCESS;
end;
*************************
function RollbackMediaPackagePathRegistryEntry(hMSI)
STRING svRollbackPackagePath, szCompressedGUID, szKey;
STRING svIsMinorUpgrade, svPathValue;
NUMBER nBuffer, nvPathSize, nReturn;
begin
nBuffer = 1;
svIsMinorUpgrade = "0";
MsiGetProperty (ISMSI_HANDLE, "IS_MINOR_UPGRADE", svIsMinorUpgrade, nBuffer);
if (svIsMinorUpgrade != "1") then
return ERROR_SUCCESS;
endif;
nBuffer = 40;
MsiGetProperty(ISMSI_HANDLE, "COMPRESSED_PROD_GUID", szCompressedGUID, nBuffer);
nBuffer = 130;
MsiGetProperty (ISMSI_HANDLE, "MEDIAPACKAGEPATHROLLBACK", svRollbackPackagePath, nBuffer);
RegDBSetDefaultRoot(HKEY_CLASSES_ROOT);
szKey = "Installer\\Products\\" + szCompressedGUID + "\\SourceList\\Media";
RegDBSetKeyValueEx ( szKey, "MediaPackage", REGDB_STRING, svRollbackPackagePath, -1 );
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szKey = "SOFTWARE\\Classes\\Installer\\Products\\" + szCompressedGUID + "\\SourceList\\Media";
RegDBSetKeyValueEx ( szKey, "MediaPackage", REGDB_STRING, svRollbackPackagePath, -1 );
return ERROR_SUCCESS;
end;