在InstallShield 2012的Basic MSI工程中,我們在Custom Action裡通過InstallScript呼叫MSI的API時發生了變化。
比如下面這段程式碼,我們在InstallShield 2011裡獲取UpgradeCode:
function MsiGetProperty_2011(hMSI)
STRING szPropertyName, svPropertyValue;
NUMBER nvBufferSize;
begin
szPropertyName = "UpgradeCode";
MsiGetProperty(hMSI, szPropertyName, svPropertyValue, nvBufferSize);
MessageBox(svPropertyValue, INFORMATION);
end;
上面這段程式碼,如果我們放到InstallShield 2012中,svPropertyValue的值為空,正確呼叫方法如下:
function MsiGetProperty_2012(hMSI)
STRING szPropertyName, svPropertyValue;
NUMBER nvBufferSize;
begin
szPropertyName = "UpgradeCode";
nvBufferSize = 256;
MsiGetProperty(hMSI, szPropertyName, svPropertyValue, nvBufferSize);
MessageBox(svPropertyValue, INFORMATION);
end;
要指定一個合適的nvBufferSize值,如果按照以前方法呼叫不賦值,則預設為0,這樣將導致我們無法獲得正確的Property值。
詳細見:http://support.installshield.com/kb/view.asp?articleid=Q211163 的“Changes in Behavior for Some MSI APIs That Are Called in InstallScript Custom Actions”一節。