我正在使用HTA尝试使用WindowsInstaller.Installer作为ActiveXObject安装产品。使用过去一直使用的相同HTA模型,尝试安装时会抛出错误:“Msi API错误:InstallProduct,PackagePath,PropertyValues”。MSI失败的HTA安装程序
我在Windows Vista和Server 2003上都尝试过这种方式,但没有成功。两者都使用IE8,所以我认为这可能是某种ActiveX兼容性问题。然后我在IE6中测试了它,并遇到了同样的问题 - 但是,过去我们几次使用这种格式的HTA,并取得了成功。我试图从两台机器上的管理员帐户进行安装,并且MSI本身按预期执行。
到目前为止我曾尝试以下:
- 更改文件路径为MSI到绝对
- 更改“命令行设置”(第二个参数)为InstallProduct方法“ACTION = ADMIN”(强制管理员安装)和‘ACTION =’在IE
- 更改ActiveX设置 - ‘安装初始化和脚本的ActiveX控件未标记为可安全执行脚本’设置为‘提示’
- 添加本地主机到可信站点列表在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(显然已经被修复)。有任何想法吗?
您是否尝试过运行在Windows脚本宿主的.wsf文件,而不是HTA此相同的脚本?如果是这样,结果是一样的吗? – dreftymac 2009-10-30 04:38:53
我已经在XP机器上运行没有管理帐户的示例,它可以工作。 (只删除了''display:none; visibility:hidden;“')所以它可能对Vista/2003特别有用? – Paul 2009-11-02 12:47:42
它似乎在Windows 7上正常工作。您是否检查了_real_错误代码的应用程序事件日志(应该来自MsiInstaller)? – tyranid 2009-11-09 22:31:26