5

我正在使用HTA尝试使用WindowsInstaller.Installer作为ActiveXObject安装产品。使用过去一直使用的相同HTA模型,尝试安装时会抛出错误:“Msi API错误:InstallProduct,PackagePath,PropertyValues”。MSI失败的HTA安装程序

我在Windows Vista和Server 2003上都尝试过这种方式,但没有成功。两者都使用IE8,所以我认为这可能是某种ActiveX兼容性问题。然后我在IE6中测试了它,并遇到了同样的问题 - 但是,过去我们几次使用这种格式的HTA,并取得了成功。我试图从两台机器上的管理员帐户进行安装,并且MSI本身按预期执行。

到目前为止我曾尝试以下:

  1. 更改文件路径为MSI到绝对
  2. 更改“命令行设置”(第二个参数)为InstallProduct方法“ACTION = ADMIN”(强制管理员安装)和‘ACTION =’在IE
  3. 更改ActiveX设置 - ‘安装初始化和脚本的ActiveX控件未标记为可安全执行脚本’设置为‘提示’
  4. 添加本地主机到可信站点列表在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(显然已经被修复)。有任何想法吗?

+0

您是否尝试过运行在Windows脚本宿主的.wsf文件,而不是HTA此相同的脚本?如果是这样,结果是一样的吗? – dreftymac 2009-10-30 04:38:53

+0

我已经在XP机器上运行没有管理帐户的示例,它可以工作。 (只删除了''display:none; visibility:hidden;“')所以它可能对Vista/2003特别有用? – Paul 2009-11-02 12:47:42

+1

它似乎在Windows 7上正常工作。您是否检查了_real_错误代码的应用程序事件日志(应该来自MsiInstaller)? – tyranid 2009-11-09 22:31:26

回答

1

我的安装集有类似的问题。

我用VBScript和启动MSI

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