es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo precargar los cuadros de edición cuando se muestra mi diálogo personalizado desde el script de acción personalizada en mi MSI.

Estoy utilizando WiX para crear un diálogo/página personalizado en mi instalador, basado en WixUI_Mondo. El diálogo personalizado tiene controles de edición, similares a estos:

<?xml version="1.0" encoding="UTF-8"?>
<wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <fragment>
        <ui>
            <dialog id="ConfigDlg" width="370" height="270" title="!(loc.SetupTypeDlg_Title)">

                <control id="idTxt11" type="Text" x="20" y="65" width="60" height="16" text="Name:"></control>
                <control id="idEdt11" type="Edit" x="90" y="60" width="120" height="20" default="yes" property="PROP_NAME"></control>

                <control id="Back" type="PushButton" x="180" y="243" width="56" height="17" text="!(loc.WixUIBack)"></control>
                <control id="Next" type="PushButton" x="236" y="243" width="56" height="17" text="!(loc.WixUINext)"></control>
                <control id="Cancel" type="PushButton" x="304" y="243" width="56" height="17" cancel="yes" text="!(loc.WixUICancel)">
                    <publish event="SpawnDialog" value="CancelDlg">1</publish>
                </control>

            </dialog>
        </ui>
    </fragment>
</wix>

Puedo leer estos controles desde mi DLL de acción personalizada (escrito en C++) cuando se hace clic en el botón Next, invocándolo de la siguiente manera:

<publish dialog="ConfigDlg" control="Next" event="DoAction" value="idCA_NextBtn">1</publish>

Pero también necesito precargar los valores de esas cajas de edición cuando se muestra la página por primera vez (leyendo estos valores del registro). Esto puede ser necesario si alguien está actualizando o reparando mi software.

La pregunta es, ¿cómo puedo hacer esto desde mi acción personalizada?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para prellenar los cuadros de edición cuando se muestra la página por primera vez, puedes utilizar el elemento SetProperty en el archivo WiX para establecer el valor de la propiedad asociada al control de edición. Por ejemplo, para establecer PROP_NAME a un valor leído del registro durante la instalación, puedes agregar el siguiente código a tu archivo WiX:

    <property id="PROP_NAME" value="[REGISTRYVALUE]"></property>
    

    donde REGISTRYVALUE es el valor real leído del registro.

    Luego, en tu acción personalizada, puedes leer el valor del registro y pasarlo al instalador utilizando la función MsiSetProperty. Por ejemplo, en la función de tu acción personalizada, puedes agregar el siguiente código:

    TCHAR szValue[MAX_PATH];
    DWORD dwSize = MAX_PATH;
    if (ERROR_SUCCESS == ::SHGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\MiEmpresa\\MiProducto", "Nombre", NULL, (PVOID) szValue, &dwSize)) {
        MsiSetProperty(hInstall, TEXT("PROP_NAME"), szValue);
    }
    

    Este código lee el valor de la clave de registro “Nombre” bajo “HKEY_LOCAL_MACHINE\SOFTWARE\MiEmpresa\MiProducto” y lo almacena en el array szValue. Luego, pasa el valor al instalador utilizando la función MsiSetProperty, que establece el valor de la propiedad PROP_NAME en el instalador.

Comments are closed.