Ocena użytkowników: 4 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Inactive
 

Napisaliśmy swój program i bardzo fajnie. Czas go teraz udostępnić ... np. korzystając z VS2010 Setup Project.
Dodajemy więc do projektu Setup, określamy co i gdzie ma trafić ... Instalator gotowy ( ten etap nie jest trudny ).
Drobne poprawki, nowe funkcje ... budujemy Setup ... Instalujemy i wszystko przebiega prawidłowo.
I instalator pomyślnie zakończył działanie - a zmian nie widać.

Temat nie jest skomplikowany. Lekka modyfikacja i mamy gotowe.
Modyfikacja dotyczy zmiany klucza instalatora REINSTALLMODE. Opis poszczególnych flag jest tu , nie powinno być problemów.
Rozwiązania są dwa (a może i więcej można wymyślić).
Co będzie potrzebne ?

Modyfikacja bazowego MSI.

Dotyczy lokalnie budowanych plików instalatora.

  1. Na początek ORCA ( jak nie masz pobranego SDK, zacznij stąd ). Znajdź w katalogu:
    .../Program Files/Microsoft SDKs/Windows/v7.0A/bin/Orca.msi i go zainstaluj.
  2. Edytujemy pliczek z katalogu (jak wyżej) /msitools/Schemas/MSI/Schema.msi
  3. Szukamy zakładki PROPERTY i dodajemy klucz REINSTALMODE z wartością omus
  4. Zapisujemy.. I nasz update zadziała poprawnie.

Modyfikacja pliku wynikowego instalatora.

O ile projekt chcemy, lub wypada trzymać w więcej niż jednym kompie.
Tu temat jest jeszcze prostszy, bo nie trzeba nic ściągać ... wystarczy we właściwościach projektu Setup... umieścić w PostBuildEvents odwołanie do skryptu ....../Scripts/ReinstallMode.js $(BuiltOuputPath) który wygląda tak :

// modify reinstal mode
// Constant values from Windows Installer
var msiOpenDatabaseModeTransact = 1;
var msiViewModifyInsert = 1
var msiViewModifyUpdate = 2
var msiViewModifyAssign = 3
var msiViewModifyReplace = 4
var msiViewModifyDelete = 6


if (WScript.Arguments.Length != 1)
{
    WScript.StdErr.WriteLine(WScript.ScriptName + "file");
    WScript.Quit(1);
}

var filespec = WScript.Arguments(0);
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);
var sql
var view
var record

try
{
    WScript.Echo("Updating the Property table... REINSTALLMODE omus");
    sql = "INSERT INTO `Property` (`Property`, `Value`) VALUES ('REINSTALLMODE', 'omus')";
    view = database.OpenView(sql);
    view.Execute();
    view.Close();
    database.Commit();
}
catch(e)
{
    WScript.StdErr.WriteLine(e);
    WScript.Quit(1);
}

 

 

Plików:
ReinstallMode 0.1
(0 votes)
Licencja GNU/GPL Data 29-04-2015 16:59:08 Wielkość 581 B Download 0 Pobierz