Установщик HTA для MSI не работает - PullRequest
5 голосов
/ 23 октября 2009

Я использую HTA, чтобы попытаться установить продукт, используя WindowsInstaller.Installer в качестве объекта ActiveXObject. Используя ту же модель HTA, которая использовалась в прошлом, попытка установки выдает ошибку: «Ошибка API Msi: InstallProduct, PackagePath, PropertyValues».

Я пробовал это как на Windows Vista, так и на Server 2003, но безуспешно. Оба использовали IE8, поэтому я подумал, что это может быть какая-то проблема совместимости с ActiveX. Затем я протестировал его в IE6 и столкнулся с той же проблемой - однако мы несколько раз использовали этот формат для HTA ​​в прошлом. Я пытаюсь установить учетную запись администратора на обеих машинах, а сам MSI выполняется как положено.

До сих пор я пробовал следующее:

  1. Изменение пути к файлу для MSI на абсолютный
  2. Изменение «параметров командной строки» (второй параметр) для метода InstallProduct на «ACTION = ADMIN» (для принудительной установки администратора) и «ACTION = INSTALL»
  3. Изменение настроек ActiveX в IE - «Инициализировать элементы управления ActiveX сценариев, не помеченные как безопасные для сценариев», на «Подсказка»
  4. Добавление localhost в список доверенных сайтов в IE
  5. Добавление мета-тегов совместимости в 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 (который, по-видимому, с тех пор был исправлен). Есть идеи?

1 Ответ

1 голос
/ 10 ноября 2009

У меня похожая проблема с моим установочным набором.

Я использовал VBScript и запустил MSI

Set sh = CreateObject("WScript.Shell")
l_command =  "%SystemRoot%\System32\msiexec.exe /i """ & sh.CurrentDirectory & "\" & p_file  & """"
sh.Exec l_command
...