Я использую HTA, чтобы попытаться установить продукт, используя WindowsInstaller.Installer в качестве объекта ActiveXObject. Используя ту же модель HTA, которая использовалась в прошлом, попытка установки выдает ошибку: «Ошибка API Msi: InstallProduct, PackagePath, PropertyValues».
Я пробовал это как на Windows Vista, так и на Server 2003, но безуспешно. Оба использовали IE8, поэтому я подумал, что это может быть какая-то проблема совместимости с ActiveX. Затем я протестировал его в IE6 и столкнулся с той же проблемой - однако мы несколько раз использовали этот формат для HTA в прошлом. Я пытаюсь установить учетную запись администратора на обеих машинах, а сам MSI выполняется как положено.
До сих пор я пробовал следующее:
- Изменение пути к файлу для MSI на абсолютный
- Изменение «параметров командной строки» (второй параметр) для метода InstallProduct на «ACTION = ADMIN» (для принудительной установки администратора) и «ACTION = INSTALL»
- Изменение настроек ActiveX в IE - «Инициализировать элементы управления ActiveX сценариев, не помеченные как безопасные для сценариев», на «Подсказка»
- Добавление localhost в список доверенных сайтов в IE
- Добавление мета-тегов совместимости в HTA для работы в режимах IE7Emulation, IE5 или IE6
Вот метод / контекст, который терпит неудачу:
var Software = new Array(
new Array("..\\Software\\Product.msi", "ProductCode"));
function run_msi(i)
{
try
{
//Execute MSI application install on error resume next
var msi = new ActiveXObject("WindowsInstaller.Installer");
var installer = Software[i][0];
msi.UILevel = 5; // full interactive mode
msi.InstallProduct(installer, "");
}
catch (e)
{
alert ("Unable to launch the Installer Package. This may be because you do not have permission to install software.");
}
// Check the install status of the MSI to ensure it is in the registry
RegistryKeyExists(i);
}
Затем метод вызывается при нажатии на кнопку «установить» следующим образом
<td><span class="link" style="display: none; visibility: hidden" id="SoftwareTextTrue0"
onclick="javascript:run_msi(0);">Uninstall</span> <span class="link" style="display: none;
visibility: hidden" id="SoftwareTextFalse0" onclick="javascript:run_msi(0);">Install</span>
</td>
Я активно гуглил и обнаружил связанную проблему, только когда кто-то пытался установить Silverlight 3 (который, по-видимому, с тех пор был исправлен). Есть идеи?