3

У меня есть проект InstallScript в IS2010. Он имеет несколько сервисов, которые устанавливаются. Некоторые из них являются версиями C++ и используют «InstallShield Object for NT Services». Другие - приложения Java, установленные как службы с Java Service Wrapper через вызовы командной строки LaunchAppAndWait. Tomcat также устанавливается как услуга посредством вызова его service.bat.Как сохранить настройки сервиса с помощью установки обновления InstallShield

Когда установщик работает в режиме обновления, службы переустанавливаются, а настройки (автоматический или ручной запуск, перезапуск при сбое, учетная запись и т. Д.) Возвращаются к значениям по умолчанию.

Я хотел бы сохранить настройки сервиса перед передачей файла, а затем повторно заселить их, но я не смог найти хороший механизм для этого. Как сохранить и восстановить настройки службы?

ответ

4

Я получил эту работу, читая служебную информацию из реестра в OnUpdateUIB, прежде чем хранить его в глобальной переменной и записать информацию обратно в реестр в 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; 
Смежные вопросы