【问题标题】:How to retain service settings through InstallShield upgrade install如何通过 InstallShield 升级安装保留服务设置
【发布时间】:2010-06-03 21:48:23
【问题描述】:

我在 IS2010 中有一个 InstallScript 项目。它有一些已安装的服务。有些是 C++ exe 并使用“InstallShield Object for NT Services”。其他是通过 LaunchAppAndWait 命令行调用使用 Java Service Wrapper 作为服务安装的 Java 应用程序。 Tomcat 也通过调用 service.bat 作为服务安装。

当安装程序以升级模式运行时,会重新安装服务,并将设置(自动与手动启动、失败时重新启动、登录帐户等)恢复为默认值。

我想在文件传输之前保存服务设置,然后在之后重新填充它们,但我一直无法找到一个好的机制来执行此操作。如何保存和恢复服务设置?

【问题讨论】:

    标签: windows-services installation installshield installscript


    【解决方案1】:

    我通过在 OnUpdateUIBefore 中从注册表中读取服务信息,将其存储在全局变量中,然后将信息写回到 OnUpdateUIAfter 中的注册表中来实现此功能。

    代码:

    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;
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多