0

Одним из условий запуска моего установщика является то, что значение в реестре должно отличаться от «1», иначе оно отображает сообщение об ошибке и завершает работу.Как разрешить пользователю устанавливать только в том случае, если данный раздел реестра не имеет определенного значения?

Это невозможно сделать с помощью пользовательских действий, так как после установки произойдет событие OnBeforeInstall, поэтому пользователь может завершить настройку перед откатом.

Если я использую WiX было бы Simples в

Как я могу сделать то же самое без WiX?

ответ

0

Вам понадобится пост JScript для вашего файла MSI. Или вы можете сделать это вручную в Orca.

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

Execute("INSERT INTO `AppSearch` (`Property`, `Signature_`) VALUES ('SOMESOFTWAREVERSION', 'SomeSoftwareVersion')"); 
Execute("INSERT INTO `RegLocator` (`Signature_`, `Root`, `Key`, `Name`, `Type`) VALUES ('SomeSoftwareVersion', 2, 'SOFTWARE\\Some Manufacturer\\SomeSoftware', 'SomeSoftwareVersion', 2)"); 
Execute("INSERT INTO `LaunchCondition` (`Condition`, `Description`) VALUES ('SOMESOFTWAREVERSION <> \"#1\"', 'This application cannot be installed with SOMESOFTWARE v1. Setup now will exit.')"); 

function Execute(sql) { 
    view = database.OpenView(sql); 
    view.Execute(); 
    view.Close(); 
} 

Он проверит WOW6432Node на 64-битной Windows, так же, как делает WiX