Installshield 实现文件关联的脚本

 Installshield 2010 Install scrpit msi工程

 最近比较蛋疼的事情是打安装包的时候,需求是最后给个chechbox供用户选择是否文件关联apk,翻阅了文件关联修改注册表,有点眉目但是没有实现功能,具体代码如下:

       
 
 //设置是否关联apk,从而写注册表   
export prototype ExFn_RegDBAccationKeyValueEx(); 
function ExFn_RegDBAccationKeyValueEx() 
    STRING szKey, szNumName, szNumValue, svNumValue,svNumValue1,svNumValue2,svNumValue3, szTitle, szMsg,szNumName1, szNumValue1,szNumName2, szNumValue2,szNumName3, szNumValue3; 
    NUMBER nType, nSize, nvType, nvSize; 
    STRING szNumName4,szNumValue4,svNumValue4,szProgidKey,szNumName5,szNumValue5,svNumValue5;
begin 
    // Create a key to test. 
     RegDBSetDefaultRoot(HKEY_CLASSES_ROOT);  
    szKey = "MSApkInstaller\\"; 
    if (RegDBCreateKeyEx (szKey, "") < 0) then  
        MessageBox ("RegDBCreateKeyEx failed.", SEVERE); 
    endif; 


    // Set up parameters for call to RegDBSetKeyValueEx. 

    szNumName  = "";  
    szNumValue = TARGETDIR^"\\Resources\\logo\\MSAPK.ico,0";   
    nType      = REGDB_STRING;  
    nSize      = -1; 
    szNumName1 = "";
    szNumValue1= "open"; 
    szNumName2 = "";
    szNumValue2= "Mobfound APk安装程序"; 
    szNumName3 = "";
    szNumValue3= "\""+TARGETDIR^"\\msApkTool.exe\" -path=\"%1\"";
    szKey = "MSApkInstaller\\DefaultIcon\\";  
    // Retrieve key value information.    
    if (RegDBGetKeyValueEx (szKey, szNumName, nvType, svNumValue,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,nSize) < 0) then 
           MessageBox ("RegDBSetKeyValueEx failed.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;   
    endif;  
       
    //we should check the key1 value1 information   
    szKey = "MSApkInstaller\\shell\\"; 
    if (RegDBGetKeyValueEx (szKey, szNumName1, nvType, svNumValue1,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szKey, szNumName1, nType, szNumValue1,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx failed1.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;   
    endif;  
    
     //we should check the key2 value2 information
     szKey = "MSApkInstaller\\shell\\open\\";
    if (RegDBGetKeyValueEx (szKey, szNumName2, nvType, svNumValue2,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szKey, szNumName2, nType, szNumValue2,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx failed2.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;     
    endif;   
    
     //we should check the key3 value3 information 
     szKey = "MSApkInstaller\\shell\\open\\command\\";
    if (RegDBGetKeyValueEx (szKey, szNumName3, nvType, svNumValue3,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szKey, szNumName3, nType, szNumValue3,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx failed3.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;     
    endif;  
    
    szKey = ".apk\\";
    szNumName5 = ".";
    szNumValue5 = "MSApkInstaller";
    if (RegDBGetKeyValueEx (szKey, szNumName5, nvType, svNumValue5,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szKey, szNumName5, nType, szNumValue5,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx failed5.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;     
    endif;   
    
    
    RegDBSetDefaultRoot(HKEY_CURRENT_USER);
    szProgidKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.apk\\"; 
    szNumName4 = "Progid";
    szNumValue4 = "MSApkInstaller";      
    if (RegDBGetKeyValueEx (szProgidKey, szNumName4, nvType, svNumValue4,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szProgidKey, szNumName4, nType, szNumValue4,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx failed4.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;     
    endif;   
    //OpenWithList     
    RegDBSetDefaultRoot(HKEY_CURRENT_USER);
    szProgidKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.apk\\OpenWithList\\"; 
    szNumName4 = ".";
    szNumValue4 = "MSApkInstaller";      
    if (RegDBGetKeyValueEx (szProgidKey, szNumName4, nvType, svNumValue4,nvSize) < 0) 
    then 
       // Set a key name and a value associated with it.
       if (RegDBSetKeyValueEx (szProgidKey, szNumName4, nType, szNumValue4,nSize) < 0) then 

           MessageBox ("RegDBSetKeyValueEx OpenWithList.", SEVERE);  
       else  
        // Display what RegDBSetKeyValueEx has done. 
       endif;     
    endif;   
    InvalidateRect( 0, NULL,TRUE);            
end;  

//删除关联apk,从而删除注册表对应的内容  
export prototype ExFn_RegDBDeltKeyValueEx(); 
function ExFn_RegDBDeltKeyValueEx() 
    STRING szKey,szSubValue; 
    NUMBER nType, nSize, nvType, nvSize; 

begin 
    // Delete a key to MSApkInstaller.
    RegDBSetDefaultRoot(HKEY_CLASSES_ROOT);  
    szKey = "MSApkInstaller\\"; 
    if (RegDBDeleteKey (szKey) < 0) then
        //MessageBox ("RegDBDeleteKey apk failed.", SEVERE); 
    endif;
    RegDBSetDefaultRoot(HKEY_CURRENT_USER);  
    szKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.apk\\"; 
    if (RegDBDeleteKey (szKey) < 0) then
        //MessageBox ("RegDBDeleteKey apk failed.", SEVERE); 
    endif;  
    InvalidateRect( 0, NULL,TRUE);
 end;  
 
//注册安装程序
export prototype ExFn_RegDBInstalltKeyValueEx(); 
function ExFn_RegDBInstalltKeyValueEx() 
    STRING szKey, szNumName, szNumValue, svNumValue,szNumName1, szNumValue1,svNumValue1,szTitle, szMsg;  
    NUMBER nType, nSize, nvType, nvSize; 

begin 
    //Install key to MS 
    
    szNumName  = ""; 
    szNumValue = TARGETDIR^"\\ms\\MS.exe";
    szNumName1  = "Path"; 
    szNumValue1 = TARGETDIR^"\\ms";  
    nType      = REGDB_STRING; 
    nSize      = -1; 
    
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); 
    szKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\MS.exe"; 
    if (RegDBKeyExist(szKey) == 1) 
    then
        //MessageBox ("RegDBKeyExis ", SEVERE);
    else if (RegDBSetKeyValueEx (szKey, szNumName, nType, szNumValue,nSize) < 0) 
        // Set a key name and a value associated with it. 
        then 
             MessageBox ("RegDBSetKeyValueEx ms.exe failed.", SEVERE);  
    endif;
    endif;     
    if (RegDBKeyExist(szKey) == 1) 
    then
        //MessageBox ("RegDBKeyExis ", SEVERE);
    else if (RegDBSetKeyValueEx (szKey, szNumName1, nType, szNumValue1,nSize) < 0) 
        // Set a key name and a value associated with it. 
        then 
             MessageBox ("RegDBSetKeyValueEx path failed.", SEVERE);  
    endif;
    endif; 
 end;  
 
 
 //卸载安装程序
export prototype ExFn_RegDBUnInstalltKeyValueEx(); 
function ExFn_RegDBUnInstalltKeyValueEx() 
    STRING szKey, szNumName, szNumValue, svNumValue, szTitle, szMsg;  
    NUMBER nType, nSize, nvType, nvSize; 

begin 
    //Install key to MS     
    szNumName  = ""; 
    szNumValue = TARGETDIR^"\\MS.exe"; 
    nType      = REGDB_STRING; 
    nSize      = -1; 
    
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); 
    szKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\MS.exe"; 
    if (RegDBKeyExist(szKey) == 1) then
        MessageBox("RegDBKeyExist", SEVERE);
    endif;
    // Set a key name and a value associated with it. 
    if (RegDBDeleteKey (szKey) < 0) then 
        //MessageBox ("RegDBDeleteKey uninstall failed.", SEVERE); 
    endif; 
 end;
出现的错误,请各位指正
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值