zoukankan      html  css  js  c++  java
  • InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化

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

  • 相关阅读:
    windows下编译及使用libevent
    安装和使用memcached
    BroadcastReceiver插件化解决方案
    Service插件化解决方案
    Activity插件化解决方案
    换肤-插件化
    资源的插件化
    startActivity进行Hook
    代理模式
    对反射的封装
  • 原文地址:https://www.cnblogs.com/wanbinghong/p/2178856.html
Copyright © 2011-2022 走看看