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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-03
猜你喜欢
  • 2021-09-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案