Inno Setup, detectando si existe un archivo de parámetros?

Creé una configuración para un proyecto .NET. La intención es construir automáticamente otros MSI y paquetes requeridos para que pueda escanear el sistema y luego instalar automáticamente los paquetes correctos según sea necesario.

Lo que tengo hasta ahora:

[Files]
; Ensure all the prerequisites are installed
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\mysql-connector-net-6.8.3.msi"; Check: needsMySQLNET; DestDir: "{tmp}"; DestName: "mysqlNET.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\mysql-connector-odbc-5.3.2-win32.msi"; Check: needsMySQLODBC; DestDir: "{tmp}"; DestName: "mysqlODBC.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\sharepointclientcomponents_x64.msi"; Check: (IsWin64 and needsSharePtClient); DestDir: "{tmp}"; DestName: "sharept.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\sharepointclientcomponents_x86.msi"; Check: ((not IsWin64) and needsSharePtClient); DestDir: "{tmp}"; DestName: "sharept.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\NDP451-KB2858728-x86-x64-AllOS-ENU.exe"; Check: needsFramework; DestDir: "{tmp}"; DestName: "NDP451.exe"; Flags: ignoreversion

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysqlNET.msi"""; 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysqlODBC.msi""";
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\sharept.msi"""; 
Filename: "{tmp}\NDP451.exe"; Parameters: "/q:a /c:""install /l /q"""; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: Installing .NET Framework if needed. This may take several minutes.

[Code]
//--------------------------------------------------------------------------------
// .NET helpers
//--------------------------------------------------------------------------------
function isDotNet451Detected(): Boolean;
var 
  success: Boolean;
  release: Cardinal;
begin
  success := RegQueryDWordValue(HKLM, 
                        'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\', 
                        'Release', 
                        release);
//For .net versions
//http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx#net_b 
  Result := success and (release = 378758);
end;

function needsFramework(): Boolean;
begin
  Result := (isDotNet451Detected = False);
end;
//--------------------------------------------------------------------------------
// MySQL .NET connector 6.8.3
//--------------------------------------------------------------------------------
function isMySQLNETconnectorInstalled(): Boolean;
var 
  success: Boolean;
  version: String;
begin
  success := RegQueryStringValue(HKLM, 
                        'SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net\', 
                        'Version', 
                        version); 
  Result := success and (CompareStr(version, '6.8.3') = 0);
end;

function needsMySQLNET(): Boolean;
begin
  Result := (isMySQLNETconnectorInstalled = False);
end;
//--------------------------------------------------------------------------------
// MySQL ODBC Connector 5.3
//--------------------------------------------------------------------------------
function isMySQLODBCconnectorInstalled(): Boolean;
var
  success: Boolean;
  version: String;
begin
  success := RegQueryStringValue(HKLM, 
                        'SOFTWARE\MySQL AB\MySQL Connector/ODBC 5.3\', 
                        'Version', 
                        version); 
  Result := success and (CompareStr(version, '5.3.2') = 0);
end;

function needsMySQLODBC(): boolean;
begin
  Result := (isMySQLODBCconnectorInstalled = False);
end;
//--------------------------------------------------------------------------------
// Sharepoint client components
//--------------------------------------------------------------------------------
function isSharepointClientInstalled(): Boolean;
begin
  Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\SharePoint Client Components');
end;

function needsSharePtClient(): Boolean;
begin
  Result := (not isSharepointClientInstalled);
end;

Las comprobaciones en la sección 'Archivos' funcionan bien, sin embargo, la sección 'Ejecutar' intenta instalar los archivos que se especifican en la opción 'Parámetros' y estos no están presentes, por lo que recibo un mensaje de error.

Mi pregunta es, ¿hay alguna forma de detectar si el archivo especificado en 'Parámetros' existe antes de intentar instalarlo?

Probé BeforeInstall pero no estoy seguro de cómo usarlo, ya que no parece aceptar una devolución.

Gracias,

preguntado Oct 07 '14, 14:10

¡Resuelto! Agregué /quiet a los parámetros de la línea de comandos de MSI. -

1 Respuestas

En primer lugar, le recomendaría que mueva la instalación de requisitos previos a la PrepareToInstall evento. Ese es el lugar adecuado para instalar los requisitos previos.


Para responder a su pregunta, no, no hay forma de detectar si el archivo especificado en el Parameters param existe antes del procesamiento de entrada y no puede obtener ese valor de parámetro en el script. Pero si se queda en la forma en que está instalando sus requisitos previos, aún puede hacer (al menos) lo siguiente:

  • reutilizar su existente Check funciones también para su [Run] entradas de sección
  • escribir para su [Run] entradas de sección Check funciones, por ejemplo, sólo con el FileExists función (sin embargo, eso requeriría copiar/pegar esos nombres de archivo de su Parameters parámetros)
  • utilizar el AfterInstall funciones para ejecutar inmediatamente el recién procesado [Files] entrada (que cambiaría la hora en que se ejecutaría el instalador)

Respondido 07 Oct 14, 14:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.