Necesito agregar una nueva fila en la base de datos de archivos msi, es decir, necesito agregar una nueva fila en la tabla de propiedades. URL del servidor = "www.google.com". He intentado usar orca y pude hacerlo. Pero este es un proceso manual. Necesito hacerlo por código.
¿Cómo puedo lograr esto en C#? Intenté usar las opciones de la línea de comandos pero inicia el instalador. Necesito editar la tabla sin iniciar el instalador en el archivo msi existente.
Ha pasado un tiempo desde que miré esto, solo te señalaré dos respuestas anteriores.
¡Importante! : Siempre debe evitar el posprocesamiento del MSI si puede. Puede crear un MST (transformación) para agregarlo al MSI durante la instalación o configurarlo como una propiedad en la línea de comandos. Consulte esta respuesta anterior: Transformaciones y PROPIEDADES PÚBLICAS: personalización pesada y ligera de los instaladores de MSI y desde la sección "Personalización de la instalación silenciosa" en adelante .
VBScript : hay un VBScript WiRunSQL.vbs , que es parte del SDK de Windows, solo busque en su carpeta SDK si tiene instalado Visual Studio.
Puede usar esto y un archivo por lotes para posprocesar un MSI ( muestra aquí ):
cscript.exe "%~dp0"\WiRunSQL.vbs "MySetup.msi" "INSERT INTO `Property` (`Property`, `Value`) VALUES ('MYPROPERTY', 'PropertyValue')" pauseHay una respuesta anterior aquí sobre cómo cambiar las cosas en la tabla ControlCondition.
C# : También hay algún código C# aquí que puedes probar. No tan bien probado, y no es el mejor código en general, pero eche un vistazo.
Alternativamente, pruebe esta fuente . Necesita saber qué es DTF para esta fuente. ¿Qué es DTF ? DTF se incluye en el código por esta referencia: using Microsoft.Deployment.WindowsInstaller;
Brevemente en línea:
public static void Set(string msi, string name, string value) { using (Database db = new Database(msi, DatabaseOpenMode.Direct)) { db.Execute("UPDATE `Property` SET `Value` = '{0}' WHERE `Property` = '{1}'", value, name); } }Algunos enlaces :