5

J'utilise une HTA pour essayer d'installer un produit en utilisant WindowsInstaller.Installer comme ActiveXObject. En utilisant le même modèle HTA qui a été utilisé dans le passé, la tentative d'installation renvoie l'erreur: "Msi API Error: InstallProduct, PackagePath, PropertyValues".installateur HTA pour MSI ne

J'ai essayé cela sur Windows Vista et Server 2003 sans succès. Les deux ont utilisé IE8, donc j'ai pensé qu'il pourrait être une sorte de problème de compatibilité ActiveX. J'ai ensuite testé dans IE6 et rencontré le même problème - cependant, nous avons utilisé ce format pour HTA plusieurs fois dans le passé avec succès. J'essaye d'installer à partir d'un compte d'administrateur sur les deux machines, et le MSI lui-même s'exécute comme prévu.

Jusqu'à présent, j'ai essayé ce qui suit:

  1. Modification du chemin du fichier pour le MSI à absolu
  2. Modification des « paramètres de ligne de commande » (le second paramètre) pour la méthode InstallProduct à « ACTION = ADMIN »(pour forcer un administrateur d'installation) et « ACTION = iNSTALLER »
  3. Modification des paramètres ActiveX dans IE - « Initialiser et de script ActiveX non marqués comme sécurisés pour le script » à « rapide »
  4. Ajout localhost aux sites de confiance la liste dans IE
  5. Ajout de balises meta de compatibilité à l'HTA de fonctionner en mode IE7Emulation, IE5 ou IE6

Voici la méthode/contexte qui échoue:

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); 
} 

La méthode est alors appelée en cliquant sur un bouton « installer » comme suit

<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>

J'ai googlé abondamment et seulement trouvé un problème connexe quand quelqu'un était essayer pour installer Silverlight 3 (qui a apparemment été corrigé depuis). Des idées?

+0

Avez-vous essayé d'exécuter ce même script sous Windows Scripting fichier .wsf hôte au lieu de HTA? Si oui, le résultat était-il le même? – dreftymac

+0

J'ai exécuté votre exemple sans compte administratif sur une machine XP et cela fonctionne. (seulement enlevé le '' display: none; visibilité: caché; "') Donc, il pourrait être particulier à Vista/2003? – Paul

+1

Cela semble fonctionner correctement pour moi sur Windows 7. Avez-vous vérifié le journal des événements de l'application (doit provenir de MsiInstaller) pour le code d'erreur _real_? – tyranid

Répondre

1

J'ai un problème similaire avec mon jeu d'installation.

J'ai utilisé un VBScript et démarrer le MSI

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