Pergunta

Tenho um aplicativo da era de 2006 para o qual preciso criar um instalador.Para que o aplicativo funcione corretamente, a instância do SQL Server e o nome do banco de dados precisam ser adicionados aos argumentos do atalho.

O problema que estou tendo é que os valores das minhas variáveis não estão preenchendo os argumentos de um atalho.

No log de instalação, posso ver que os valores das variáveis são preenchidos em uma caixa de diálogo personalizada e posso ver o atalho sendo criado, mas os argumentos não estão sendo adicionados.

<?define SqlServerInstance="SqlServerInstance" ?>
<?define DatabaseName="DatabaseName" ?>

<Component Id="LWS" Guid="0FB32FAD-83B2-4C0B-B929-C93220E4681A">
    <File Id='LwsEXE' Name='Lws.exe' DiskId='1' Source='..\files\lws\Lws.exe' KeyPath='yes'>
        <Shortcut Id="startmenuLWS" Directory="ProgramMenuFolder" Name="LWS" WorkingDirectory='INSTALLDIR' Icon="LWS.ico" IconIndex="0" Advertise="yes" Arguments="[SqlServerInstance] [DatabaseName]"  />
        <Shortcut Id="desktopLWS" Directory="DesktopFolder" Name="LWS" WorkingDirectory='INSTALLDIR' Icon="LWS.ico" IconIndex="0" Advertise="yes" Arguments="[SqlServerInstance] [DatabaseName]"  />
    </File>
</Component>

<Dialog Id="DatabaseLocationDlg" Width="370" Height="270" Title="[ProductName] Database Connection [Setup]" NoMinimize="yes">
    <Control Id="ServerNameLabel" Type="Text" X="45" Y="73" Width="100" Height="15" TabSkip="no" Text="&amp;SQL Server Name:" />
    <Control Id="ServerNameEdit" Type="Edit" X="45" Y="85" Width="220" Height="18" Property="$(var.SqlServerInstance)" Text="[SqlServerInstance]" />
    <Control Id="DataBaseLabel" Type="Text" X="45" Y="110" Width="100" Height="15" TabSkip="no" Text="&amp;Database Name:" />
    <Control Id="DatabaseEdit" Type="Edit" X="45" Y="122" Width="220" Height="18" Property="$(var.DatabaseName)" Text="[DatabaseName]" />
    <!-- more stuff here-->
</Dialog>

Alguma ideia do que estou fazendo de errado?

Foi útil?

Solução

<?define?> cria uma variável de pré-processador, que é resolvida no momento da construção.Você quer uma propriedade, que é um conceito de tempo de execução.Use <Property>, torne-o público usando um Id em maiúsculas e defina o valor do atributo Secure como yes para propagar da IU para o tempo de execução de instalação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top