InstallShield 2012新功能試用(2)- 呼叫MsiGetProperty等MSI API發生變化

weixin_34321977發表於2011-09-16

在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”一節。

相關文章