batch-file components inno-setup

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;