InstallShield 2012新功能试用(2)- 调用MsiGetProperty等MSI API发生变化
2011-09-16 15:53 Kevin.Wan 阅读(4131) 评论(0) 编辑 收藏 举报在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”一节。
万炳宏(Kevin Wan)
Avizo/Amira技术交流,欢迎加我微信:13911850365或QQ:17842153