Como usar uma propriedade do instalador MSI na mensagem de condição no instalador do WiX?

0

Eu quero usar uma propriedade do instalador MSI em uma mensagem de condição em um instalador de WiX. Esta propriedade MSI é definida por uma ação personalizada do C ++. Eu posso definir e obter a mesma propriedade e valor MSI antes de chamar a mensagem de condição, mas ela está falhando quando eu a uso na mensagem de condição.

Minha mensagem de condição é semelhante a

<CustomAction Id="CustomAction1" BinaryKey="CustomDLL"
              DllEntry="CustomAction1" Execute="immediate" Return="check" />

<InstallUISequence>
 <Custom Action="CustomAction1" Before="LaunchConditions">Not Installed</Custom>
</InstallUISequence>

<InstallExecuteSequence >
 <Custom Action="CustomAction1" Before="LaunchConditions">Not Installed</Custom>
</InstallExecuteSequence>

<Condition Message="message comes here.">
 <![CDATA[(MyProperty= "NO")]]>
</Condition>

Aqui, MyProperty é uma string e retorna YES ou NO, e é definida por CA do C ++ e essa condição está falhando nos dois casos. Mas eu quero mostrar essa mensagem somente quando o MyProperty estiver definido como "NO".

Então, como uso minha propriedade MSI personalizada em uma mensagem de condição que foi definida por uma ação personalizada?

    
por Anna 20.01.2014 / 14:04

2 respostas

0

Eu tentaria SUPERIOR a propriedade MyProperty para torná-la Propriedade PUBLIC , e então eu também declararia isso em sua fonte WiX via um Property Element e defina o Secure attribute para Yes e veja se isso ajuda. A marcação WiX:

<Property Id='MYPROPERTY' Secure='yes' />

Eu também recuperaria a propriedade depois de configurá-la em sua ação personalizada do C ++ para determinar se ela foi definida corretamente (pode estar em branco). Usando o VBScript, você pode recuperar a propriedade com muita facilidade. Aqui está um exemplo (o VBScript ajuda a evitar qualquer compilação e você pode incorporar a fonte na ação personalizada - ótima para fins de teste - e usá-la somente para propósitos de teste):

MsgBox Session.Property("MYPROPERTY")

Como um elemento WiX, algo assim (não é possível testar agora - experimente - lembre-se de inserir o InstallUISequence ou InstallExecuteSequence ):

<CustomAction Id="Test" Script="vbscript">
   <![CDATA[MsgBox Session.Property("MYPROPERTY")]]>
</CustomAction>

Acredito que isso deve ajudá-lo a descobrir qual é realmente o problema.

Você pode usar o elemento Propriedade de WiX para testar a condição codificando um valor definitivo (caso a chamada da propriedade do conjunto de códigos C ++ seja o problema). O seguinte deve fazer com que sua condição de lançamento seja avaliada como falsa (ativando a mensagem que você especificou para mostrar):

<Property Id='MYPROPERTY' Secure='yes' Value="YES" />
    
por 25.05.2018 / 01:08
-1

As perguntas sobre codificação estão melhor posicionadas no link

A resposta a esta pergunta é muito mais complicada do que deveria ser. Por favor, verifique se este post faz você ir na direção certa, e eu voltarei para ver se o seu problema foi resolvido: link

Além do que essa pergunta menciona, verifique se sua propriedade está listada na lista delimitada de "propriedades seguras" no Propriedade SecureCustomProperties .

Toda essa complexidade vem do conceito "privilégios elevados" do Windows Installer, que permite que usuários não-administradores instalem com direitos elevados às vezes. Para que isso funcione, nenhuma propriedade pode ser acessada diretamente na transação executada com direitos elevados, e você deve gravar especificamente seu valor no script de execução e recuperá-los de uma maneira bastante exótica, como você verá nos artigos vinculados. Envolve a leitura de uma propriedade chamada CustomActionData .

Finalmente, e importante; postar em stackoverflow.com também. O WiX pode ter uma maneira mais avançada de lidar com essa complexidade neste estágio que eu não conheço. Algum tipo de automagia.

    
por 30.01.2014 / 09:55