Inno Setup, detectando si existe un archivo de parámetros?
Frecuentes
Visto 1,092 equipos
0
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,
1 Respuestas
1
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ónCheck
funciones, por ejemplo, sólo con elFileExists
función (sin embargo, eso requeriría copiar/pegar esos nombres de archivo de suParameters
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 file installation windows-installer inno-setup or haz tu propia pregunta.
¡Resuelto! Agregué /quiet a los parámetros de la línea de comandos de MSI. - SPlatten