How to retain service settings through InstallShield upgrade install

后端 未结 1 560
谎友^
谎友^ 2021-01-06 14:57

I have an InstallScript project in IS2010. It has a handful of services that get installed. Some are C++ exes and use the \"InstallShield Object for NT Services\". Others

相关标签:
1条回答
  • 2021-01-06 15:50

    I got this working by reading the service information from the registry in OnUpdateUIBefore, storing it in a global variable, and writing the information back to the registry in OnUpdateUIAfter.

    Code:

    export prototype void LoadServiceSettings();
    function void LoadServiceSettings()
    number i, nResult;
    string sServiceNameArray(11), sRegKey, sTemp;
    BOOL bEntryFound;
    begin
    PopulateServiceNameList(sServiceNameArray);
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    //write service start values to the registry
    for i = 0 to 10
        if (ServiceExistsService(sServiceNameArray(i))) then
            sRegKey = "SYSTEM\\CurrentControlSet\\Services\\" + sServiceNameArray(i);
            nResult = RegDBSetKeyValueEx(sRegKey, "Start", REGDB_NUMBER, sServiceSettings(i), -1);
            if(nResult < 0) then
                MessageBox ("Unable to save service settings: " + sServiceNameArray(i) + ".", SEVERE);
            endif;
        endif;
    endfor;
    RegDBSetDefaultRoot(HKEY_CLASSES_ROOT); //set back to default
    end;
    
    export prototype void SaveServiceSettings();
    function void SaveServiceSettings()
    number i, nType, nSize, nResult;
    string sServiceNameArray(11), sRegKey, sKeyValue;
    begin
    PopulateServiceNameList(sServiceNameArray);
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    for i = 0 to 10
        if (ServiceExistsService(sServiceNameArray(i))) then
            //get service start values from registry
            sRegKey = "SYSTEM\\CurrentControlSet\\Services\\" + sServiceNameArray(i);
            nResult = RegDBGetKeyValueEx(sRegKey, "Start", nType, sKeyValue, nSize);
            if(nResult < 0) then
                MessageBox ("Unable to save service settings: " + sServiceNameArray(i) + ".", SEVERE);
            endif;
            sServiceSettings(i) = sKeyValue;
        endif;
    endfor;
    RegDBSetDefaultRoot(HKEY_CLASSES_ROOT); //set back to default
    end;
    
    0 讨论(0)
提交回复
热议问题