2009-10-23 3 views
1

J'essaye de simuler la propriété InstallURL d'un MSI d'installation de VS.net ... Je dois au ponit où le MSI de WIX ouvrira un navigateur à la page de téléchargement que je veux qu'il allume. Je pensais que tout allait bien parce que sur ma machine de test, la page Web s'ouvrait lorsque le composant MSXML6 n'était pas installé. Cependant, les choses ont mal tourné lorsque j'ai découvert que la page Web était ouverte même lorsque le composant était installé.Pourquoi ma propriété Wix n'est-elle pas évaluée?

Je recherche le composant MSXML6 à l'aide d'une propriété avec RegistrySearch. Cependant, le mieux que je puisse dire, la valeur du registre n'est même pas évaluée, et donc il semble que "toujours" il n'est pas installé.

est ici la partie pertinente de mon WXS:

<Property Id="MSXML6"> 
     <RegistrySearch Id="MSXML6Search" Root="HKCR" Key="Msxml2.DOMDocument.6.0" Type="raw" /> 
    </Property> 
    <Property Id="TEST"> 
     <RegistrySearch Id="TESTSearch" Root="HKLM" Type="raw" Name="Version" Key="SOFTWARE\Microsoft\DirectX" /> 
    </Property> 
    <Property Id="cmd.exe" Value="cmd.exe" /> 
    <CustomAction Id="OpenMSXML6Download" Property="cmd.exe" ExeCommand="/c start http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1" Execute="immediate" Return="check" /> 
    <CustomAction Id="OpenMSXML6DownloadError" Error="This component requires MSXML6. =[MSXML6]=[cmd.exe]=[TEST]= A web browser has been opened to the download page. Please install MSXML6 and then re-install the connector." /> 

    <!-- installation execution sequence --> 
    <InstallExecuteSequence> 
     <!-- wires the error dialog to the downgrade event --> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 

     <!-- execution to delete old install info after upgrade--> 
     <RemoveExistingProducts After="InstallValidate" /> 

     <!-- Forces MSXML6 to be pre-installed --> 
     <!-- <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> --> 
     <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> 
     <Custom Action="OpenMSXML6DownloadError" After="OpenMSXML6Download">NOT MSXML6</Custom> 
    </InstallExecuteSequence> 

    <!-- ui information for the custom actions above. --> 
    <InstallUISequence> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
     <Custom Action="OpenMSXML6Download" Before="FindRelatedProducts">NOT MSXML6</Custom> 
     <Custom Action="OpenMSXML6DownloadError" After="OpenMSXML6Download">NOT MSXML6</Custom> 
    </InstallUISequence> 

Ce que cela fait est si MSXML6 n'est pas définie alors il ouvre la page Web, puis imprime le message d'erreur personnalisé. Notez que j'essaye d'imprimer la valeur de la propriété dans le message d'erreur (je ne suis pas sûr si ceci est valide ou pas, mais il semble être.) Le texte que je vois indique "ce composant exige MSXML6. = [cmd.exe] == ... "donc il imprime la valeur de la propriété 'cmd.exe' mais pas les deux autres ... c'est peut-être parce que je définis la propriété explicitement, je ne suis pas sûr ... Quoi qu'il en soit, j'ai également exécuté le MSI avec débogage, et dans le fichier journal, je ne vois absolument aucune référence au MSXML6 ou aux propriétés TEST jamais définies. J'ai confirmé que les valeurs de registre sont bien définies, bien que je ne sois pas sûr à 100% comment gérer la clé de registre Msxml2, car elle n'a pas de valeurs réelles, seulement une valeur par défaut. (Je suppose que laisser le paramètre 'Nom' est la bonne façon de gérer cela.)

Aide ??

Répondre

3

J'ai réussi à comprendre celui-ci ... c'était une réponse assez simple. Le problème de base était que les actions personnalisées s'exécutaient avant AppSearch, où les propriétés de RegistrySearch sont évaluées. Voir mon article de blog au CTICoder pour plus de détails.