batch file - Inno सेटअप-बाह्य स्रोत(फाइल या फ़ोल्डर सामग्री) से घटकों/प्रकारों की गतिशील सूची बनाएं



batch-file components (1)

मेरे पास एक बैच फाइल है (सेटिंग परिवर्तक) जो किसी विशेष फ़ोल्डर में विशिष्ट फाइल स्वरूपों को सूचीबद्ध करने के लिए एक्सकोपी का उपयोग करता है, फिर मुझे एक नाम टाइप करने की अनुमति देता है और स्क्रिप्ट उस फ़ाइल को दूसरे स्थान पर कॉपी करने के लिए उस नाम का उपयोग करती है।

पहले xcopy बैकअप के रूप में मूल की प्रतिलिपि बनाता है ( केवल 1 प्रतिलिपि को बैकअप लेना ) तो फ़ाइल की प्रतिलिपि बनाता है (बैच में विस्तार तय है केवल फ़ाइल नाम की आवश्यकता है यह बहुत अच्छा काम करता है, लेकिन मुझे इनो सेटअप में करने का प्रयास करना अच्छा लगता है एक अच्छा साफ जीयूआई

मैं एक विशिष्ट निश्चित फ़ोल्डर में मिली फ़ाइलों की इस सूची से घटकों / प्रकारों की सूची को पॉप्युलेट करना चाहता हूं। या यहां तक ​​कि उन नामों के साथ एक ini फ़ाइल बनाते हैं ( अतिरिक्त कदम लेकिन शायद बेहतर नियंत्रण ) मुख्य समस्या यह संभव होने से रोक सकती है, यह नहीं जानती कि यह कितनी प्रविष्टियां होगी, यह एक सरणी होगी। यदि केवल 1 प्रविष्टि या फ़ाइल केवल 1 विकल्प (1 या एक) अगर 4 तब उपयोगकर्ता 4 का 1 (ए, बी, सी या डी) चुन सकता है। नाम / विवरण बनाने के लिए मैं फ़ाइल नाम निकालेगा।

तो मेरे बैच के रूप में एक ही काम को पूरा करने पर, बैकअप (हमेशा हमेशा start.ini जैसे एक ही नाम) तो फ़ाइल की प्रतिलिपि करें उदाहरण example1.ini और अधिलेखन start.ini

ini सबसे अधिक लचीला हो सकता है क्योंकि मैं कल्पना करता हूं कि बाद में किए गए कार्यों को बदलने के लिए नए वर्गों को जोड़ना होगा।

क्या यह संभव है या इस कार्यक्रम को बहुत दूर खींच रहा है मेरे बैच के रूप में जल्दी नहीं है, लेकिन कम टाइपिंग और मैन्युअल कदम निरंतर उपयोग के लिए बेहतर हैं।

मुझे एक डायलॉग विंडो में सामग्री की सूची के लिए एक उदाहरण मिला लेकिन मुझे यह पता नहीं लगा कि इसका इस्तेमाल कैसे किया जा सके। TLama - एक निर्देशिका में सभी फाइलों की सूची


आप रनटाइम पर गतिशील रूप से घटकों को नहीं बना सकते (आप संकलन समय पर कर सकते हैं)

लेकिन CreateCustomPage और CreateCustomPage का उपयोग कर कस्टम डायनामिक घटकों जैसे पृष्ठ को लागू करना मुश्किल नहीं है।

फिर CurStepChanged(ssInstall) आप चयनित फ़ाइलों / घटकों को अपनी आवश्यकता के अनुसार प्रोसेस करते हैं।

[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;




inno-setup