HTA を使用して、WindowsInstaller.Installer を ActiveXObject として使用して製品をインストールしようとしています。過去に使用されていたのと同じ HTA モデルを使用してインストールしようとすると、「Msi API エラー: InstallProduct,PackagePath,PropertyValues」というエラーがスローされます。
Windows Vista と Server 2003 の両方でこれを試しましたが、成功しませんでした。どちらも IE8 を使用していたので、ActiveX の互換性の問題ではないかと考えました。その後、IE6 でテストしたところ、同じ問題が発生しました。ただし、過去に何度か HTA にこの形式を使用して成功しました。両方のマシンで管理者アカウントからインストールしようとしていますが、MSI 自体は期待どおりに実行されます。
これまでのところ、次のことを試しました。
- MSI のファイル パスを絶対パスに変更する
- InstallProduct メソッドの「コマンド ライン設定」(2 番目のパラメーター) を「ACTION=ADMIN」(管理者によるインストールを強制する) および「ACTION=INSTALL」に変更します。
- IE の ActiveX 設定の変更 - 「スクリプトを実行しても安全であるとマークされていない ActiveX コントロールを初期化してスクリプト化する」を「プロンプト」に変更する
- IE の信頼済みサイト リストに localhost を追加する
- 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をインストールしようとしたときに関連する問題しか見つかりませんでした(これはその後修正されたようです). 何か案は?