batch file - Inno Setup-Crea una lista dinámica de componentes/tipos de fuentes externas(contenido de archivos o carpetas)
batch-file components (1)
Tengo un archivo por lotes (cambiador de configuración) que usa xcopy para listar formatos de archivos específicos en una carpeta específica, luego me permite escribir uno de los nombres y la secuencia de comandos usa ese nombre para copiar ese archivo a otra ubicación.
Primero xcopy crea una copia del original como copia de seguridad (copia de seguridad rodante solamente 1 copia ) y luego hace la copia del archivo (la extensión se repara solo en el cuerpo del nombre del archivo) Esto funciona bien PERO me gustaría probar y hacer esto en Inno Setup for una buena GUI limpia
Me gustaría completar la lista de componentes / tipos de esta lista de archivos encontrados en una carpeta fija específica. O incluso crea un archivo ini con esos nombres en ( paso adicional, pero quizás con un mejor control ). El problema principal que puede evitar que esto sea posible es no saber cuántas entradas sería una matriz. Si solo 1 entrada o archivo solo tiene 1 opción (1 o a) si es 4, entonces el usuario puede seleccionar 1 de 4 (a, b, c o d). Extraería el nombre del archivo para crear el nombre / descripción.
Luego, al completar la misma tarea que mi lote, haga una copia de seguridad (fácil siempre el mismo nombre como start.ini) luego copie el archivo, por ejemplo, ejemplo1.ini y sobrescriba start.ini
ini podría ser más flexible, ya que me puedo imaginar más tarde agregando nuevas secciones para cambiar las acciones realizadas.
¿Es esto posible o estirar este programa demasiado lejos? No hay prisa porque mi lote funciona por ahora, pero cuanto menos tipee y más pasos manuales, mejor para un uso continuado.
Encontré un ejemplo para mostrar los contenidos en una ventana de diálogo, pero no pude encontrar la manera de usarlo para completar los componentes. TLama: enumera todos los archivos en un directorio
No puede crear los componentes dinámicamente en tiempo de ejecución (puede hacerlo en tiempo de compilación).
Pero no es difícil implementar una página similar a componentes dinámicos personalizados utilizando CreateCustomPage
y TNewCheckListBox
.
Luego, en CurStepChanged(ssInstall)
, procesa los archivos / componentes seleccionados según sus necesidades.
[Code]
const
SourcePath = ''C:/somepath'';
var
CustomSelectTasksPage: TWizardPage;
ComponentsList: TNewCheckListBox;
procedure InitializeWizard();
var
FindRec: TFindRec;
SelectComponentsLabel: TNewStaticText;
begin
CustomSelectTasksPage :=
CreateCustomPage(
wpSelectComponents, SetupMessage(msgWizardSelectComponents),
SetupMessage(msgSelectComponentsDesc));
SelectComponentsLabel := TNewStaticText.Create(WizardForm);
SelectComponentsLabel.Parent := CustomSelectTasksPage.Surface;
SelectComponentsLabel.Top := 0;
SelectComponentsLabel.Left := 0;
SelectComponentsLabel.Width := CustomSelectTasksPage.Surface.Width;
SelectComponentsLabel.AutoSize := False;
SelectComponentsLabel.ShowAccelChar := False;
SelectComponentsLabel.WordWrap := True;
SelectComponentsLabel.Caption := SetupMessage(msgSelectComponentsLabel2);
WizardForm.AdjustLabelHeight(SelectComponentsLabel);
ComponentsList := TNewCheckListBox.Create(WizardForm);
ComponentsList.Parent := CustomSelectTasksPage.Surface;
ComponentsList.Top :=
SelectComponentsLabel.Top + SelectComponentsLabel.Height + ScaleY(8);
ComponentsList.Left := 0;
ComponentsList.Width := CustomSelectTasksPage.Surface.Width;
ComponentsList.Height := CustomSelectTasksPage.Surface.Height - ComponentsList.Top;
if FindFirst(ExpandConstant(AddBackslash(SourcePath) + ''*.dat''), FindRec) then
begin
try
repeat
ComponentsList.AddCheckBox(FindRec.Name, '''', 0, False, True, False, False, nil);
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
I: Integer;
FileName: string;
SourceFilePath: string;
TargetFilePath: string;
begin
if CurStep = ssInstall then
begin
for I := 0 to ComponentsList.Items.Count - 1 do
begin
if ComponentsList.Checked[I] then
begin
FileName := ComponentsList.Items[I];
SourceFilePath := AddBackslash(SourcePath) + FileName;
TargetFilePath := AddBackslash(ExpandConstant(''{app}'')) + FileName;
if FileCopy(SourceFilePath, TargetFilePath, False) then
begin
Log(Format(''Installed "%s".'', [FileName]));
end
else
begin
Log(Format(''Failed to install "%s".'', [FileName]));
end;
end;
end;
end;
end;